Unittest的assertEqual与可迭代对象 - 仅检查内容
在unittest中,有没有什么“不错”的方法可以检查两个可迭代对象的内容是否相等?我使用了很多元组、列表和numpy数组,通常我只想测试内容,而不关心类型。目前我只是简单地转换类型:
self.assertEqual (tuple (self.numpy_data), tuple (self.reference_list))
我之前用过这个列表推导式:
[self.assertEqual (*x) for x in zip(self.numpy_data, self.reference_list)]
但是这个方法似乎比类型转换要差一些,因为如果比较失败,它只会打印出单个值,而且对于参考数据和实际数据长度不同的情况,它也不会报错(这是因为使用了zip函数)。
3 个回答
0
看起来你很在意序列中项目的顺序。因此,assertItemsEqual
和assertCountEqual
不适合你。
在Python 2.7和Python 3中,你需要的是self.assertSequenceEqual
。这个方法会考虑项目的顺序。
10
你可以随时在你的 TestCase 类里添加自己的断言方法:
def assertSequenceEqual(self, it1, it2):
self.assertEqual(tuple(it1), tuple(it2))
或者看看 2.7 是怎么定义的: http://hg.python.org/cpython/file/14cafb8d1480/Lib/unittest/case.py#l621
102
Python 3
- 如果你不在乎内容的顺序,可以使用assertCountEqual(a,b)这个方法。
- 如果你在乎内容的顺序,可以使用assertSequenceEqual(a,b)这个方法。
Python >= 2.7
- 如果你不在乎内容的顺序,可以使用assertItemsEqual(a,b)这个方法。
- 如果你在乎内容的顺序,可以使用assertSequenceEqual(a,b)这个方法。