Gibt es eine "anständige" Möglichkeit, die Gleichheit des Inhalts von zwei iterierbaren Objekten zu überprüfen? Ich verwende viele Tupel, Listen und Numpy-Arrays und möchte normalerweise nur den Inhalt und nicht den Typ testen. Momentan gieße ich einfach den Typ:
self.assertEqual (tuple (self.numpy_data), tuple (self.reference_list))
Ich habe dieses Listenverständnis vor einiger Zeit verwendet:
[self.assertEqual (*x) for x in zip(self.numpy_data, self.reference_list)]
Diese Lösung scheint dem Typecast jedoch etwas unterlegen zu sein, da sie nur dann einzelne Werte druckt, wenn sie fehlschlägt, und auch nicht für unterschiedliche Referenz- und Datenlängen (aufgrund der Zip-Funktion) fehlschlägt.
python
unit-testing
assert
iterable
Lucas Hoepner
quelle
quelle
assertSequenceEqual
Generatoren nicht verglichen werden können, da es den Anschein hat, als würden Sie versuchen,len()
das Ergebnis abzurufen.assertSequenceEqual
, zweinumpy
Arrays zu vergleichen . Der Test gibt jedoch einen Wertefehler zurück, der besagt, dass "(...) der Wahrheitswert eines Arrays mit mehr als einem Element nicht eindeutig ist". WennA = numpy.array([0, 1, 2, 3, 4, 5])
und ausgeführt wirdB = numpy.array([0, 1, 2, 3, 4, 5])
, wirdself.assertSequenceEqual(A, B)
der Fehler ausgelöst. Aber wenn ichself.assertSequenceEqual(list(A), list(B))
die Testdurchläufe wie erwartet benutze . Ich möchte nur wissen, ob dies die richtige Art ist, den Test durchzuführen.Sie können Ihrer TestCase-Klasse jederzeit Ihre eigenen Assertionsmethoden hinzufügen:
def assertSequenceEqual(self, it1, it2): self.assertEqual(tuple(it1), tuple(it2))
oder sehen Sie sich an, wie 2.7 es definiert hat: http://hg.python.org/cpython/file/14cafb8d1480/Lib/unittest/case.py#l621
quelle
assertItemsEqual
ist ungeordnet. Ich habe es behoben, um auf ein passenderes Beispiel hinzuweisen.Mir scheint, Sie interessieren sich für die Reihenfolge der Elemente in den Sequenzen. Deshalb ist
assertItemsEqual
/assertCountEqual
nichts für dich.In Python 2.7 und in Python 3 möchten Sie Folgendes
self.assertSequenceEqual
. Dies hängt von der Reihenfolge der Artikel ab.quelle