猴子补丁未通过类导入

时间:2018-08-23 18:51:23

标签: python pytest monkeypatching

我正在尝试使用pytest测试一些代码,并且需要从某个模块更改功能。我的导入之一也导入了该函数,但是当我使用monkeypatch更改方法时,这失败了。这是我所拥有的:

util.py

def foo():
    raise ConnectionError  # simulate an error
    return 'bar'

something.py

from proj import util

need_this = util.foo()
print(need_this)

test_this.py

import pytest

@pytest.fixture(autouse=True)
def fix_foo(monkeypatch):
    monkeypatch.setattr('proj.something.util.foo', lambda: 'bar')

import proj.something

这引起ConnectionError。如果我改变

test_this.py

import pytest

@pytest.fixture(autouse=True)
def fix_foo(monkeypatch):
    monkeypatch.setattr('proj.something.util.foo', lambda: 'bar')

def test_test():
    import proj.something

然后在monkeypatch正常工作的情况下导入。虽然我已经读过this并试图从中对测试进行建模,但是除非我将其导入测试中,否则这是行不通的。如果只是在测试文件中正常导入,为什么monkeypatch不执行任何操作?

1 个答案:

答案 0 :(得分:1)

这是因为固定装置不是应用于整个代码,而是应用于测试功能。 autouse=True属性只是说应该在每个测试中使用