我已经定义了以下类:
class Config:
def __init__(self) -> None:
self._entries = dict()
@property
def entries(self):
return self._entries
def __contains__(self, key: any) -> bool:
"""
Returns True if specified key is in the existing config
entries, else returns False.
"""
return key in self.entries
然后我有另一个类通过调用Config.__contains__
:
def some_function():
config_obj = Config()
if entry in config_obj:
# Do something.
现在,我想对some_function
和mock Config.__contains__
进行单元测试。为此,我定义了这个测试函数:
from unittest.mock import MagicMock
def test_some_function()
# given
mocked_config_obj = Config()
mocked_config_obj.__contains__ = MagicMock(return_value=True)
# when
some_function()
# then
mocked_config_obj.__contains__.assert_called_once() # Fails
理想情况下,if entry in config_obj
应该调用mocked_config_obj.__contains__
,但实际上没有。
1条答案
按热度按时间bq3bfh9z1#
您创建了一个
MagicMock
对象并将其赋值给一个名为mocked_config_obj
的变量,但您从未为包含some_function
的模块打补丁以使用该模拟对象。假设我们有一个实现
Config
类的模块config.py
:以及实现
SomeClass
的模块some_module.py
,它使用config.Config
:然后我们可以写一个像这样的测试:
这将安排
config_obj = Config()
接收一个mock对象,然后我们可以在some_function
返回时测试调用。