monkeypatching не переносит импорт классов

1

Я пытаюсь проверить некоторый код, используя 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 ничего не делает, если это обычный импорт в тестовый файл?

Теги:
monkeypatching
pytest

1 ответ

1

Это связано с тем, что прибор применяется к тестовой функции не ко всему коду. autouse=True атрибут просто говорит, что он должен использоваться в каждом тесте

Ещё вопросы

Сообщество Overcoder
Наверх
Меню