69

在 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)]

但是这个解决方案似乎比 typecast 有点逊色,因为它只在失败时打印单个值,而且对于不同长度的引用和数据也不会失败(由于 zip 功能)。

4

3 回答 3

101

蟒蛇 3

蟒蛇> = 2.7

于 2011-09-19T15:13:09.453 回答
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

于 2011-09-19T15:16:02.693 回答
0

在我看来,您关心序列中项目的顺序。因此,assertItemsEqual/assertCountEqual不适合您。

在 Python 2.7 和 Python 3 中,你想要的是self.assertSequenceEqual. 这对项目的顺序很敏感。

于 2017-10-15T13:35:25.103 回答