如何在 Python 中模拟从 MongoClient() 返回的数据
How to mock data returned from MongoClient() in Python
我正在尝试编写测试用例,我想模拟从 MongoClient() 返回的数据对象,下面是代码。
numbers.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.
冲突
你没有正确修补目标。您应该修补 my_numbers.py
模块的 MongoClient
。有关详细信息,请参阅 where-to-patch
例如
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/Whosebug/66852436/test_my_numbers.py && coverage report -m --include='./src/**'
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------------
src/Whosebug/66852436/my_numbers.py 4 0 100%
src/Whosebug/66852436/test_my_numbers.py 11 0 100%
-----------------------------------------------------------------------------
TOTAL 15 0 100%
我正在尝试编写测试用例,我想模拟从 MongoClient() 返回的数据对象,下面是代码。
numbers.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.
你没有正确修补目标。您应该修补 my_numbers.py
模块的 MongoClient
。有关详细信息,请参阅 where-to-patch
例如
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/Whosebug/66852436/test_my_numbers.py && coverage report -m --include='./src/**'
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------------
src/Whosebug/66852436/my_numbers.py 4 0 100%
src/Whosebug/66852436/test_my_numbers.py 11 0 100%
-----------------------------------------------------------------------------
TOTAL 15 0 100%