如何创建多个MagicMock实例

时间:2019-03-07 08:00:53

标签: python python-unittest

假设我有一个类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,但是我失去了检查被测方法使用正确接口与实体进行通信的优势。

有什么办法可以解决此问题?

我的测试设计有问题吗?有没有更好的体系结构可以使这种情况更易于测试?

0 个答案:

没有答案