簡體   English   中英

如何在 Python 中模擬從 MongoClient() 返回的數據

[英]How to mock data returned from MongoClient() in Python

我正在嘗試編寫測試用例,我想模擬從 MongoClient() 返回的數據 object,下面是代碼。

數字.py

def get_count():

    client_int = MongoClient('abc.xyz.com', port=27010)

    return client_int

test_numbers.py

@patch('pymongo.MongoClient')

def test_get_count(mocked_object):

    mocked_object.return_value = [{'1': 'data'}]

    assert numbers.get_count() == [{'1': 'data'}] # Here i am getting Assertion Error, MongoClient!=[{'1': 'data'}]

如何使這項工作? 什么地方出了錯??

首先,你應該重命名你的模塊。 您不能使用numbers ,因為它與 python 內置庫numbers沖突。

您沒有正確修補目標。 您應該修補MongoClient模塊的my_numbers.py 有關詳細信息,請參閱修補程序的位置

例如

my_numbers.py

from pymongo import MongoClient


def get_count():

    client_int = MongoClient('abc.xyz.com', port=27010)

    return client_int

test_my_numbers.py

import unittest
from unittest.mock import patch
import my_numbers


class TestNumbers(unittest.TestCase):
    @patch('my_numbers.MongoClient')
    def test_get_count(self, mocked_object):
        mocked_object.return_value = [{'1': 'data'}]
        assert my_numbers.get_count() == [{'1': 'data'}]
        mocked_object.called_once_with_value('abc.xyz.com', port=27010)


if __name__ == '__main__':
    unittest.main()

單元測試結果:

 ⚡  coverage run /Users/dulin/workspace/github.com/mrdulin/python-codelab/src/stackoverflow/66852436/test_my_numbers.py && coverage report -m --include='./src/**'
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Name                                            Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------------
src/stackoverflow/66852436/my_numbers.py            4      0   100%
src/stackoverflow/66852436/test_my_numbers.py      11      0   100%
-----------------------------------------------------------------------------
TOTAL                                              15      0   100%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM