猴子补丁无法正常工作

monkey patch not working properly

所以我 运行宁 py.test 并尝试使用 monkeypatch。我知道 monkeypatch 的预期目的是替换模块中的属性,以便可以测试它们。我知道我们可以用模拟函数代替来做到这一点。

目前我正在尝试 运行 本质上是以下代码块。

from src.module.submodule import *

def mock_function(parameter = None):
    return 0

def test_function_works(monkeypatch):
    monkeypatch.setattr("src.module.submodule.function",mock_function ]
   assert function(parameter = None) == 0

当测试 运行s 时,不是交换 mock_function,而是 运行s function 。 monkeypatch 没有激活是不是有原因

我之前用其他代码成功地获得了猴子补丁运行ning。所以我不明白为什么这不起作用。

好像打错了,应该是吧

 monkeypatch.setattr("src.module.submodule.function",mockIfunction)

mockIfunction 而不是 mock_function?

我没有为这些东西使用过 pytest,但我知道使用 mock 库,函数在调用它们的命名空间中被修补。即 from src.module.submodule import *src.module.submodule.function 导入您的命名空间,但您随后在其原始命名空间中对其进行了修补,因此该函数的本地名称仍然可以访问原始的、未修补的代码。

如果将其更改为

import src.module.submodule

def mock_function(parameter = None):
    return 0

def test_function_works(monkeypatch):
    monkeypatch.setattr("src.module.submodule.function",mock_function ]
    assert src.module.submodule.function(parameter = None) == 0

成功了吗?