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-функции).
Ответы
Ответ 1
Python 3
Python >= 2.7
Ответ 2
Вы всегда можете добавить свои собственные методы утверждения в свой класс 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
Ответ 3
Мне кажется, вы заботитесь о порядке элементов в последовательности. Поэтому assertItemsEqual
/assertCountEqual
не для вас.
В Python 2.7 и в Python 3 вы хотите self.assertSequenceEqual
. Это чувствительно к порядку элементов.