如何使用方法 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 并且适用于所有测试客户端。
我是 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 并且适用于所有测试客户端。