#python #python-unittest
#python #python-unittest
Вопрос:
Давайте предположим, что у меня есть класс, MyEntity
который имеет атрибут id
и метод do_something()
, и класс, MyEntityProcessor
у которого есть метод process_enities_list()
, метод требует список объектов и выполняет некоторый вызов обработки do_something()
для каждого объекта.
Я хочу протестировать process_entities_list()
с помощью unittest и MagicMock. Я думаю, что в идеале код должен выглядеть примерно так
class TestProcessor(unittest.TestCase):
@mock.patch("MyEntity", autospec=True)
def test_processing(self, MockEntity):
entities = []
for i in range(5):
entities.append(MockEntity(id = i))
result = process_entities_list(entities)
for entity in entities:
entity.do_something.assert_called_once()
Но MockEntity()
всегда возвращается одна и та же копия объекта MagickMock, поэтому тест работает не так, как предполагалось.
Я могу заменить MockTree
просто «Mock», но тогда я теряю преимущество проверки того, что тестируемый метод использует правильный интерфейс для связи с объектом.
Есть ли какой-нибудь способ исправить эту проблему?
Что-то не так с моим тестовым дизайном? Существует ли лучшая архитектура, облегчающая тестирование этого случая?
Комментарии:
1. Есть ли какая-либо причина, по которой вы не создали бы экземпляр
Mock
илиMagicMock
сspec=MockEntity
помощьюMockEntity
set, вместо того, чтобы исправлять сам по себе класс?2. Кажется, это работает, спасибо