Wie gehe ich mit mehreren behauptet, in einem einzigen Python-unittest?

Dies ist ein problem, das kam bei der Durchführung einer einzelnen Prüfung, die hatten mehrere unabhängige Ausfall-Modi, durch die mehrere output-streams. Ich wollte auch zeigen die Ergebnisse auf die Geltendmachung der Daten auf alle diese Modi unabhängig davon, welche zunächst gescheitert. Python-unittest hat keine solche Funktion außerhalb der unter Verwendung einer Suite zur Darstellung der einzelnen Tests, die inakzeptabel war, da meine einzigen test immer erforderlich, um ausgeführt werden als eine einzige Einheit; es einfach nicht einfangen der Natur der Sache.

Einem praktischen Beispiel testen ist ein Objekt, das erzeugt auch ein Protokoll. Sie wollen geltend machen, die Ausgabe der Methoden, aber Sie wollen auch, um die für die Geltendmachung der log-Ausgabe. Die beiden Ausgänge erfordern unterschiedliche tests, die ordentlich ausgedrückt, in zwei Lager behauptet Ausdrücken, aber Sie auch nicht wollen, dass der Ausfall eines zu verbergen, die möglichen Fehler der anderen in den test. So dass Sie wirklich brauchen, um zu testen beide gleichzeitig.

Ich zusammengeschustert diese nützlichen kleinen widget mein problem zu lösen.

def logFailures(fnList):
    failurelog = []
    for fn in fnList:
        try:
            fn()
        except AssertionError as e:
            failurelog.append("\nFailure %d: %s" % (len(failurelog)+1,str(e)))

    if len(failurelog) != 0:
        raise AssertionError(
            "%d failures within test.\n %s" % (len(failurelog),"\n".join(failurelog))
        )

Welches verwendet wird, etwa so:

def test__myTest():
    # do some work here
    logFailures([
        lambda: assert_(False,"This test failed."),
        lambda: assert_(False,"This test also failed."),
    ])

Das Ergebnis ist, dass logFailures() wirft eine Ausnahme, die enthält ein Protokoll aller Behauptungen, die großgezogen wurden in Methoden innerhalb der Liste.

Die Frage: dies hat Zwar den job, ich bin Links Fragen, ob es einen besseren Weg um dies zu umgehen, anders als mit zu gehen, um die Länge der erstellen von verschachtelten Suiten von tests und so weiter?

"Sie wollen auch nicht den Fehler eines zu verbergen, die möglichen Fehler der anderen in die Prüfung". Wenn Sie testen möchten, zwei verschiedene Dinge sind, machen es zwei verschiedene tests!
"Sie wollen auch nicht den Fehler eines zu verbergen, die möglichen Fehler der anderen in die Prüfung". Ja - ich will: diese sind unit-tests. Wenn einer der Tests fehlschlägt, korrigieren Sie die fehlerhaften und re-führen Sie die tests aus.

InformationsquelleAutor Eric Anderton | 2012-03-22

Schreibe einen Kommentar