首页 > 解决方案 > 如何使两个相等的 unittest.mock.Mock 对象具有相同的类型?

问题描述

我必须确保序列是同质的,即只包含相似类型的对象。所以我添加了一个断言,比如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。

标签: pythonpython-3.xunit-testingmocking

解决方案


为什么不这样做呢?

class A:
    pass

class MockA(Mock, A):
    pass

a1 = MockA()
a2 = MockA()

assert isinstance(a1, MockA) == isinstance(a2, MockA)

推荐阅读