python - 如何使两个相等的 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。
解决方案
为什么不这样做呢?
class A:
pass
class MockA(Mock, A):
pass
a1 = MockA()
a2 = MockA()
assert isinstance(a1, MockA) == isinstance(a2, MockA)
推荐阅读
- ios - 如何正确启动 iPhone 摄像头
- php - 我无法将 Bootstrap 4.1.0 链接到我的 Laravel 项目
- python - Python,输入字符串并获取输出的脚本
- angular - 尝试在 android (ionic v4) 上下载图像时出错
- javascript - 如何堆叠两个可滚动的 div
- python - 为什么当 x 在 numpy 中增加时,2 提高到 x 会给出负值?
- reactjs - 将 Jest 和 Enzyme 添加到 React 样板文件中
- javascript - 为什么只有在重新加载页面后才会加载语言?i18n
- r - 在“df1”中添加一个新变量(标准偏差),用于依赖“df2”中的多行并以“日期时间”和其他两个变量为条件的行
- spring - Spring WebFlux:如何根据查询参数路由到不同的处理函数?