Wie kann ich behaupten Listen Gleichstellung mit pytest
Ich versuche, mich einige unit-tests mit pytest.
Ich dachte an Dinge wie:
actual = b_manager.get_b(complete_set)
assert actual is not None
assert actual.columns == ['bl', 'direction', 'day']
Die erste Behauptung in Ordnung, aber mit dem zweiten habe ich einen Wert-Fehler.
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Ich nehme an, es ist nicht der richtige Weg zur Durchsetzung der Gleichheit von zwei unterschiedlichen Listen mit pytest.
Wie kann ich behaupten, dass der dataframe Spalten (a-Liste) ist gleich dem erwarteten?
Dank
Der traceback umfasst ein Tipp... Verwenden
Ist
die tatsächliche.Spalten ist eine Liste, in der Tat. Nach ein wenig nachforschungen erkannte ich, dass der Vergleich gibt eine weitere Liste mit booleans zu überprüfen, ob der Inhalt unterschiedlich ist, oder nicht. [True, False, True, True ..].Und das ist der Grund, warum ich die .Alle().. werden in der Lage zu geben, die Behaupten, eine einzigartige Boolean nicht eine Liste boolescher Werte
Ich bin mit pytest, nicht die eingebaute unittest-framework. Was soll dann sein, eine normale Art und Weise zu tun unittest?
a.any()
oder a.all()
. BTW assert
ist nicht die 'normale' Art und Weise zu tun, unittestingassert
ist DIE Möglichkeit zum testen der Werte unter pytest
. pytest
intern schreibt byte-code von assert
s und nennt seine eigenen Vergleich-Funktion.Ist
actual.columns
eine Liste? Die traceback-schlägt es ist ein bool.die tatsächliche.Spalten ist eine Liste, in der Tat. Nach ein wenig nachforschungen erkannte ich, dass der Vergleich gibt eine weitere Liste mit booleans zu überprüfen, ob der Inhalt unterschiedlich ist, oder nicht. [True, False, True, True ..].Und das ist der Grund, warum ich die .Alle().. werden in der Lage zu geben, die Behaupten, eine einzigartige Boolean nicht eine Liste boolescher Werte
Ich bin mit pytest, nicht die eingebaute unittest-framework. Was soll dann sein, eine normale Art und Weise zu tun unittest?
InformationsquelleAutor bAN | 2017-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnten Sie eine Liste mit Verständnis zu überprüfen Gleichheit aller Werte. Wenn Sie anrufen
all
auf der Liste Verstehens Ergebnis, wird es wiederTrue
wenn alle Parameter gleich sind.alle() nimmt ein iterierbar, in der Liste Vergleich zurückkehren würde eine bool.
InformationsquelleAutor ritchie46
Sehen diese:
Und diese:
Und die reporting-demo:
Finden die Behauptung für Listen, die Gleichstellung mit den wörtlichen
==
da drüben? pytest getan hat, die harte Arbeit für Sie.Aus irgendeinem Grund bin ich immer die Fehlermeldung von
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
obwohl ich mit pytest version 4.3.0es ist wahrscheinlich, dass einer oder beide Werte für den Vergleich sind numpy-arrays. Es scheint in diesem Fall pytest würde der test für die Wahrheit Wert von numpy-array Ergebnis des Vergleichs, das ist ein numpy array von booleschen Werten, und numpy ergäbe die obige Warnung. Versuchen Sie das einwickeln beide Werte mit
list()
.Ja, das ist mein problem gelöst, vielen Dank Pomin.
InformationsquelleAutor Rockallite
Wenn Sie mit dem eingebauten
unittest.TestCase
gibt es bereits eine Methode, kann das für Sie tun:unittest.TestCase.assertListEqual
wenn Sie kümmern sich um die Liste zu bestellen, undunittest.TestCase.assertCountEqual
wenn Sie nicht.https://docs.python.org/3.5/library/unittest.html#unittest.TestCase.assertCountEqual
Aufruf
unittest.TestCase().assertCountEqual(first, second)
im pytest testcase funktioniert Prima. Sie erhalten etwas schlechter Fehlermeldung (mit traceback aus der assertCountEqual-Methode), wenn die Bestätigung fehlschlägt, aber ansonsten ist es kein problem.InformationsquelleAutor Dylan Orzel