Unittest的assertEqual和iterables – 只检查内容
在unit testing中有一个“体面的”方法来检查两个可迭代对象的内容是否相等? 我使用了很多元组,列表和numpy数组,我通常只想testing内容而不是types。 目前我只是简单的input:
self.assertEqual (tuple (self.numpy_data), tuple (self.reference_list))
前一段时间我使用了这个列表理解:
[self.assertEqual (*x) for x in zip(self.numpy_data, self.reference_list)]
但是,这个解决scheme似乎比typecast差一点,因为它只在打印失败的时候打印单个值,而且对于不同长度的参考和数据(由于zip函数)也不会失败。
在python> = 2.7中:
- 如果你不关心内容的顺序,你有assertItemsEqual(actual_iterable,expected_iterable)方法
- 如果你关心内容的顺序,你有assertSequenceEqual(actual_iterable,expected_iterable)方法
在python 3中, assertItemsEqual方法被命名为assertCountEqual 。
您始终可以将您自己的断言方法添加到您的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
它在我看来你关心的序列中的项目的顺序。 因此, assertItemsEqual
/ assertCountEqual
不适合你。
在Python 2.7和Python 3中,你想要的是self.assertSequenceEqual
。 这对项目的顺序很敏感。