У меня есть ситуация, подобная следующей
@attrs(auto_attribs=True)
class ExampleClass:
_prop: OtherClass = attrib(init=False, default=OtherClass())
def some_func(self):
test_var = OtherClass()
test_var.some_func()
self._prop.some_func()
class OtherClass:
def some_func(self):
raise NotImplementedException
def test_example(mocker):
mocker.patch("path.to.example_class.OtherClass")
sut = ExampleClass()
sut.some_func()
Все классы и тесты находятся в разных файлах, и mocker - это приспособление, предоставленное pytest_mock, которое является просто оболочкой для unittest.mock, которая принимаетзаботиться об очистке проще.
Проблема, с которой я сталкиваюсь, заключается в том, что при запуске модульных тестов test_var правильно назначается как MagicMock из функции патча.Поэтому, когда test_var.some_func () возвращается, все в порядке.
Когда вызывается self._prop.some_func()
, NotImplementedException
повышается, так как кажется, что патч не влияет на это.
В моем модульном тесте я мог установить sut._prop = MagicMock()
, но это внутренняя деталь реализации, делающая его хрупким.
Как можно избежать насмешек над переменной по умолчанию в attrib?