猴子补丁不能正常工作

时间:2015-12-08 17:25:28

标签: python unit-testing pytest monkeypatching

所以我正在运行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补丁。所以我不明白为什么这不起作用。

2 个答案:

答案 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

成功吗?