Код: Выделить всё
class AbstractFoo(abc.ABC):
def append_something(self, text: str) -> str:
return text + self.create_something(len(text))
@abc.abstractmethod
def create_something(self, number: int) -> str:
raise NotImplementedError()
# IMPORTANT: many other abstract methods irrelevant for the test omitted here
Код: Выделить всё
# Without this, `AbstractFoo` cannot be instantiated.
AbstractFoo.__abstractmethods__ = frozenset()
mock_foo = unittest.mock.Mock(wraps=AbstractFoo())
mock_foo.create_something.return_value = "bar"
assert mock_foo.append_something("foo") == "foobar"
mock_foo.create_something.assert_called_once_with(3)
class MockFoo(AbstractFoo):
def create_something(self, number: int) -> str:
return "bar"
MockFoo.__abstractmethods__ = frozenset()
mock_foo = unittest.mock.Mock(wraps=MockFoo())
mock_foo.create_something.side_effect = lambda *args, **kwargs: unittest.mock.DEFAULT
assert mock_foo.append_something("foo") == "foobar"
mock_foo.create_something.assert_called_once_with(3)
< /code>
На этот раз я получаю: < /p>
AssertionError: Expected 'create_something' to be called once. Called 0 times.
< /code>
< /li>
< /ul>
Вопросы: < /p>
В обоих моих неудачных попытках, кажется, не используется. Почему это?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ubclassing