it-swarm.cn

Unittest的assertEqual和iterables - 只检查内容

在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函数)。

62
Lucas Hoepner

Python 3

Python> = 2.7

91
Cédric Julien

您始终可以将自己的断言方法添加到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

9
Ned Batchelder

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

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

0
user7610