Unittest的assertEqual和iterables - 只检查内容

时间:2011-09-19 15:08:52

标签: python unit-testing assert iterable

在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 :(得分:91)

Python 3

Python> = 2.7

答案 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。这对项目的顺序很敏感。