Unittest的assertEqual与可迭代对象 - 仅检查内容

72 投票
3 回答
49529 浏览
提问于 2025-04-17 02:36

在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

看起来你很在意序列中项目的顺序。因此,assertItemsEqualassertCountEqual不适合你。

在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

Python >= 2.7

撰写回答