【问题标题】:How to MagicMock a list of object with method and get assert count如何使用方法 MagicMock 对象列表并获取断言计数
【发布时间】:2015-06-12 17:33:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-unittest magicmock


    【解决方案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 每次都是一个新对象。

    【讨论】:

    • 嗨,亚当,感谢您的回复。我想指出这是我必须测试的方法。我将有一个单独的单元测试方法隔离,它将测试上述方法。抱歉,我的帖子可能不清楚。
    • @harsh8888 我的编辑更符合您想要完成的目标吗?
    【解决方案2】:

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

    【讨论】:

    • 是的,我在使用 mock 时发现了一些问题。感谢您的意见。我会研究软糖!
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多