假设我有一个类MyEntity
,它具有属性id
和方法do_something()
,以及类MyEntityProcessor
,它具有方法process_enities_list()
,该方法需要一个实体列表,并对每个实体进行一些处理,以调用do_something()
。
我想用unittest和MagicMock测试process_entities_list()
。我认为理想的代码应该看起来像这样
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对象的相同副本,因此测试无法按预期进行。
我可以只用'Mock'代替MockTree
,但是我失去了检查被测方法使用正确接口与实体进行通信的优势。
有什么办法可以解决此问题?
我的测试设计有问题吗?有没有更好的体系结构可以使这种情况更易于测试?