python - 列表项的assertEqual自定义比较
问题描述
在 Python 中,我想为特定类执行自定义比较。我必须测试的函数返回一个列表,其中包含由我无法控制的库创建的对象。错误(使我的测试失败)是因为这个特定的对象比较。
第一个不同的元素 0:
return 实际上是正确的,但是__eq__
库对象的功能 return False
。
class NotControlledClass:
def __eq__(self, other):
# Always return false as objects are created into the tested function and
# the other one into the testing function
return False
def myCustomEqual(a, b, msg):
# This is never call
return a.name == b.name
def test(self):
self.addTypeEqualityFunc(NotControlledClass, myCustomEqual)
obj1 = NotControlledClass()
obj2 = NotControlledClass()
self.assertEquals([obj1], [obj2])
我试图遍历我的结果并逐个比较元素,但问题是该函数可以返回递归结果,例如将列表返回到列表中。
有谁知道如何使这个测试通过?
解决方案
但问题是该函数可能会返回递归结果,例如 list into list
所以让我们使用递归。我可以建议以下代码(未经测试):
def assertListNotControlledClassEqual(self, list1, list2, msg=None):
self.assertEqual(len(list1), len(list2), msg)
for obj1, obj2 in zip(list1, list2):
self.assertEqual(type(obj1), type(obj2), msg)
if isinstance(obj1, list):
self.assertListNotControlledClassEqual(obj1, obj2, msg)
else:
self.assertEqual(obj1, obj2, msg)
...
def test(self):
self.addTypeEqualityFunc(NotControlledClass, myCustomEqual)
obj1 = NotControlledClass()
obj2 = NotControlledClass()
self.assertListNotControlledClassEqual([obj1], [obj2])
这对我来说似乎是单元测试中的一个错误。我希望
addTypeEqualityFunc
递归到容器中,但它没有
assertEqual状态手册:
此外,如果 first 和 second 是完全相同的类型,并且 list、tuple、dict、set、frozenset 或 str 中的一个或子类使用
addTypeEqualityFunc()
特定于类型的相等函数注册的任何类型,将被调用以生成更有用的默认错误信息
但是,特定类型的列表方法assertListEqualaddTypeEqualityFunc()
根本没有提及
推荐阅读
- javascript - 在异步模块内调用没有回调的函数
- c - 二维数组和指针有什么关系?
- javascript - redux 不在另一个页面上显示道具
- php - 将 MySQL SELECT 查询与 IF 语句相结合
- php - 使用 Laravel 按点订购收集
- python - 当前操作系统上不可用的功能的python异常?
- c# - “重力”不包含“CENTER_HORIZONTAL”的定义
- java - 如何使用 Sheets APIv4 Java 在 Google 表格中插入一行
- awk - 如何将 awk 指令的结果输出到与当前工作目录不同的目录
- unity3d - Unity 中的物理对象在低速时无法正确反弹