如何使用方法 MagicMock 对象列表并获取断言计数

How to MagicMock a list of object with method and get assert count

我是 python 中使用 MagicMock 进行单元测试的新手。我有以下代码来断言 python 中的正确方法计数:

 def methodFoo(self):
       for booObject in self.booObjectList:
            booObject.shooMethod()

我希望在我的单元测试代码中执行方法 shooMethod() 的断言调用计数,以查看它是否对 booObjectList 中的 N 个对象执行 N 次调用。上面的函数不是我的单元测试代码。是在我的单元测试class中新建一个方法test_methodFoo()来测试的方法。我该怎么做?谢谢你的帮助。

Mock 对象有一个属性 called that tracks whether a Mock has been called, and an attribute call_count 跟踪它们被调用的次数。

def test_methodFoo(self):
    self.object_under_test.methodFoo()
    self.assertTrue(all([booObject.shooMethod.called for
                         booObject in self.object_under_test.booObjectList]))

但请注意,您不能执行以下操作:

for o in list_of_four_o_mocks:
    o.mocked_method()
self.assertEqual(o.mocked_method.call_count, 4)

因为 o 每次都是一个新对象。

由于 Adam Smith 已经回答了您的问题,这只是个人建议 - 当我开始进行 mock 时,我在使用 mock 库时也遇到了很多问题。此外 python-mock 不适用于其他测试客户端,如 pytest 等。所以我建议你使用 fudge 库。它更 pythonic 并且适用于所有测试客户端。