所以我正在运行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
当测试运行时,它不是在mock_function
中交换,而是运行function
。是否有理由说明monkeypatch没有激活
我之前已经使用其他代码成功运行了Monkey补丁。所以我不明白为什么这不起作用。
答案 0 :(得分:1)
看起来像一个错字,不应该是
monkeypatch.setattr("src.module.submodule.function",mockIfunction)
即。 mockIfunction
代替mock_function
?
答案 1 :(得分:0)
我还没有使用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
成功吗?