Unittestで、2つの反復可能なオブジェクトの内容の等価性をチェックする「適切な」方法はありますか?私は多くのタプル、リスト、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関数による)でも失敗しないため、タイプキャストより少し劣っているようです。
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
はあなたのためではありません。
In Python 2.7 and in Python 3、欲しいものは self.assertSequenceEqual
。これは、アイテムの順序に敏感です。