Я не могу прикрепить метод __exit__
к макету mockito в тесте, чтобы макет не возражал, когда он используется в операторе with
.
Вот примертест, который продолжает подниматься AttributeError: __exit__
:
# main.py
class FooManager(object):
def __enter__(self):
print "Connect"
def __exit__(self, exc_type, exc_val, exc_tb):
print "Dissconnect"
def foo(self):
print "Foo"
def function_to_be_tested(manager):
# type: (FooManager) -> None
with manager:
manager.foo()
# test.py
from mockito import mock, verify, when, any as ANY
def test():
manager_mock = mock()
# none of this has any effect:
manager_mock.__exit__ = lambda a, b, c: None
when(manager_mock).__exit__(ANY(), ANY(), ANY()).thenReturn(None)
function_to_be_tested(manager_mock)
verify(manager_mock, times=1).foo()
Единственное решение, которое решило мою проблему, это:
class ContextManagerMock(mock):
def __enter__(self):
return None
def __exit__(self, exc_type, exc_val, exc_tb):
return None
def test():
manager_mock = ContextManagerMock()
function_to_be_tested(manager_mock)
verify(manager_mock, times=1).foo()
Однако я хотел бы знать, почему существуетAttributeError
, когда я пытался присоединить метод __exit__
с помощью функции when
или с помощью лямбда-функции.