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