Не удается создать mockito mock с помощью метода __exit__ - PullRequest
0 голосов
/ 13 февраля 2019

Я не могу прикрепить метод __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 или с помощью лямбда-функции.

...