Python 模拟 : Mocking a function inside the function I'm testing

标签 python mocking

我正在尝试使用 Mock 来测试从检索设置的函数返回的结果:

def apply_delta_to_date(original_date):
    delta = MySettings.get_delta()
    result_date = original_date + timedelta(delta)
    return result_date

在测试 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)

问题是我无法设法“模拟”对 MySettings.get_delta() 的函数调用,它位于我真正想要测试的函数内部。

如何在我正在测试的函数中模拟内部函数返回的结果?

最佳答案

你根本没有 mock 正确的事情。您所做的只是在您的测试类中定义一个 MySettings 属性。它永远不会被任何东西调用。

您需要在调用它的地方模拟对 MySettings 的引用。假设您要从名为 my_delta_module 的模块导入 apply_delta_to_date:

@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)

关于Python 模拟 : Mocking a function inside the function I'm testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924201/

相关文章:

python - Pydrive 后端不适用于口是心非——python

python - 如何使用xml sax parser读写大的xml?

angular - 组件中的模拟服务 - 模拟被忽略

python - 使用模拟来修补不存在的属性

python - 高效的 Python 到 Python IPC

python - Aptana Studio (Windows) 删除了使用 py_compile.compile 编译的 PYC 文件

python - 具有自定义用户模型的 django-oauth2-provider?

php - 如何测试处理 Eloquent 模型的 Laravel 包?

ruby - 未定义方法 `double'

c# - 模拟 Entity Framework 数据库