【问题标题】:How to make two equal unittest.mock.Mock objects to be of the same type?如何使两个相等的 unittest.mock.Mock 对象具有相同的类型?
【发布时间】:2018-07-12 11:16:33
【问题描述】:

我必须确保序列是同质的,即只包含相似类型的对象。所以我添加了一个像assert all(isinstance(obj, type(my_list[0])) for obj in my_list[1:]) 这样的断言,这并不完美,但足以满足我的需求。不幸的是,这在与unittest.mock.Mock 一起使用时会导致问题:

import unittest.mock as utm

class C:
    pass

my_list = [utm.Mock(spec_set=C), utm.Mock(spec_set=C)]

all(isinstance(obj, type(my_list[0])) for obj in my_list[1:])
>>>
False

特别是两个模拟具有不同的类型,即使它们具有相同的spec_set

isinstance(utm.Mock(spec_set=C), type(utm.Mock(spec_set=C)))
>>>
False

有什么方法可以配置模拟,使它们被认为是同一类型?修改检查也是一种选择,只要它不是模拟特定的。

如果感兴趣的话:我使用的是 Python 3.5。

【问题讨论】:

    标签: python python-3.x unit-testing mocking


    【解决方案1】:

    为什么不这样做?

    class A:
        pass
    
    class MockA(Mock, A):
        pass
    
    a1 = MockA()
    a2 = MockA()
    
    assert isinstance(a1, MockA) == isinstance(a2, MockA)
    

    【讨论】:

    • 嗯,这意味着我必须自己编写整个模拟。当然,我的class C: pass 只是概述手头问题的一个例子。实际用例使用更复杂的类 - 所以这不是一个真正的选择。
    • 那么猴子修补测试模块中的类呢?
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 2013-10-27
    • 2011-01-30
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多