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

时间:2015-06-12 17:33:20

标签: python python-unittest magicmock

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

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

我希望在单元测试代码中执行方法shooMethod()的断言调用计数,以查看booObjectList中的N个对象是否执行N次调用。以上功能不是我的单元测试代码。这是一种通过在我的单元测试类中创建新方法test_methodFoo()来进行测试的方法。我该怎么办呢?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

Mock个对象有一个属性called,用于跟踪是否已调用Mock,以及一个属性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每次都是一个新对象。

答案 1 :(得分:0)

正如亚当·斯密已经回答了你的问题,只是一个个人建议 - 当我开始做模拟时,我也面临着很多与模拟库一起工作的问题。除了python-mock不适用于其他teating客户端如pytest等。所以我建议你使用fudge库。它更加pythonic,适用于所有测试客户。