Мы недавно перешли с юнит-теста на pytest. Я столкнулся со странной проблемой при использовании mocker.patch
в качестве менеджера контекста. Рассмотрим следующий пример.
module_a.py
class MyClass:
def value(self):
return 10
module_b.py
import module_a
class AnotherClass:
def get_value(self):
return module_a.MyClass().value()
test_module_b.py
from module_b import AnotherClass
def test_main_2(mocker):
with mocker.patch('module_a.MyClass.value', return_value=20):
value = AnotherClass().get_value()
assert value == 20
value = AnotherClass().get_value()
assert value == 10
Я ожидаючто при выходе из диспетчера контекста метод метода значений MyClass будет восстановлен (возвращаемое значение 10), однако при втором утверждении assert проверка завершится неудачно с ошибкой утверждения 20 != 10
Если я использую тот же самый тест, но заменил mocker.patch
с unittest.mock.patch
это проходит. Я думал, что pytest-mock использует тот же API, что и unittest.mock, поэтому я не понимаю, почему есть разница.