我正在尝试使用Mock来测试从检索设置的函数返回的结果:
def apply_delta_to_date(original_date):
delta = MySettings.get_delta()
result_date = original_date + timedelta(delta)
return result_date
Run Code Online (Sandbox Code Playgroud)
在测试apply_delta_to_date函数时,我试图模拟调用MySettings.get_delta以模拟它返回特定结果:
class TestAppyDelta():
def setUp(self):
self.MySettings = Mock()
self.MySettings.get_delta = Mock(return_value=10)
def test_apply_delta(self):
result = apply_delta_to_date(today)
Run Code Online (Sandbox Code Playgroud)
问题是我无法“模拟”MySettings.get_delta()我真正想要测试的函数内部的函数调用。
我如何模拟我正在测试的函数中的内部函数返回的结果?
您需要的是 patch.object 上下文管理器,它完全可以满足您的需求:它需要一个类和方法,并允许您定义自定义返回值。
from unittest.mock import patch
from <your-time_utils-module> import apply_delta_to_date, MySettings
class TestAppyDelta():
def test_apply_delta(self):
with patch.object(MySettings, 'get_delta', return_value=10) as mock_method:
result = apply_delta_to_date(today)
# mock_method has many other useful assertions
mock_method.assert_called_once()
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅文档https://docs.python.org/3/library/unittest.mock.html#quick-guide
你根本没有嘲笑正确的事情。您所做的只是在您的测试类中定义一个 MySettings 属性。它永远不会被任何东西调用。
您需要在调用它的地方模拟对 MySettings 的引用。假设您apply_delta_to_date从名为 的模块导入my_delta_module:
@patch('my_delta_module.MySettings')
def test_apply_delta(self, mock_settings):
mock_settings.get_delta.return_value = 10
result = apply_delta_to_date(today)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3427 次 |
| 最近记录: |