web-dev-qa-db-fra.com

AssertEqual et iterables de Unittest - vérifier uniquement le contenu

Existe-t-il un moyen "décent" unittest de vérifier l’égalité du contenu de deux objets itérables? J'utilise beaucoup de n-uplets, de listes et de tableaux numpy et je souhaite généralement uniquement tester le contenu et non le type. Actuellement, je lance simplement le type:

self.assertEqual (Tuple (self.numpy_data), Tuple (self.reference_list))

J'ai utilisé cette compréhension de liste il y a quelque temps:

[self.assertEqual (*x) for x in Zip(self.numpy_data, self.reference_list)]

Mais cette solution semble un peu inférieure à la conversion de type car elle n’imprime que des valeurs uniques en cas d’échec et n’est pas défaillante pour différentes longueurs de référence et de données (en raison de la fonction Zip).

61
Lucas Hoepner

Python 3

Python> = 2.7

89
Cédric Julien

Vous pouvez toujours ajouter vos propres méthodes d'assertion à votre classe TestCase:

def assertSequenceEqual(self, it1, it2):
    self.assertEqual(Tuple(it1), Tuple(it2))

ou regardez comment 2.7 l'a défini: http://hg.python.org/cpython/file/14cafb8d1480/Lib/unittest/case.py#l621

9
Ned Batchelder

Il me semble que vous vous souciez de l'ordre des éléments dans les séquences. Par conséquent, assertItemsEqual/assertCountEqual n'est pas pour vous.

En Python 2.7 et en Python 3, ce que vous voulez, c'est self.assertSequenceEqual . Ceci est sensible à l'ordre des éléments.

0
user7610