在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函数)。
答案 0 :(得分:91)
答案 1 :(得分:9)
您始终可以将自己的断言方法添加到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
答案 2 :(得分:0)
在我看来,您关心序列中项目的顺序。因此,assertItemsEqual
/ assertCountEqual
不适合您。
在Python 2.7和Python 3中,你想要的是self.assertSequenceEqual
。这对项目的顺序很敏感。