Я пытаюсь проверить некоторый код, используя pytest
и pytest
нужно изменить функцию из некоторого модуля. Один из моих импорта также импортирует эту функцию, но это не monkeypatch
когда я меняю метод с помощью 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
как и ожидалось. Я прочитал это и попытался смоделировать мое тестирование, но это не работает, если я не импортирую внутри теста. Почему monkeypatch ничего не делает, если это обычный импорт в тестовый файл?
Это связано с тем, что прибор применяется к тестовой функции не ко всему коду. autouse=True
атрибут просто говорит, что он должен использоваться в каждом тесте