in Ermangelung eines XCTestCase mit behaupten, ohne den test weiter laufen, aber ohne zu stoppen, andere tests
Ich versuche zum testen meiner Anwendung mit dem XCTest Rahmen.
Möchte ich meine einzelnen Testfall fehlschlagen, wenn eine logische Bedingung enthält (Behauptung).
Ich möchte nicht den rest des Codes in der test-Fall zu laufen, denn das könnte zu Problemen führen (Zugriff auf null-Zeiger, zum Beispiel)
Ich möchte auch den rest der Testfall normal läuft, und nur der test fehlgeschlagen zu sein, als fehlgeschlagen markiert.
Habe ich bemerkt XCTestCase hat eine Eigenschaft namens continueAfterFailure.
Jedoch, die Einstellung, die es JA verursacht der test fehlgeschlagen weiter ausgeführt Zeilen nach der Behauptung, und wenn er auf KEINE verursacht, der rest der tests nicht zu laufen.
Gibt es eine Lösung für dieses Problem?
Vielen Dank,
Yoav
InformationsquelleAutor der Frage Yoav Schwartz | 2014-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pascal, die Antwort hat mich auf die Idee dies zu erreichen, richtig. XCTool verhält sich nun wie OCUnit, wenn eine assertion fehlschlägt: die Ausführung des Testfalls wird sofort abgebrochen, tearDown aufgerufen und der nächste Testfall ausgeführt wird.
Einfach überschreiben Sie die Methode
invokeTest
in Ihrer Basis-Klasse (die, die erbt von der XCTestCase Klasse):Das ist es!
InformationsquelleAutor der Antwort Oscar Hierro
Ist der einfachste Weg, um hinzuzufügen:
in setUp () - Methode. Also wird es so Aussehen:
Swift
Objective-C
InformationsquelleAutor der Antwort nCod3d
Eine Möglichkeit wäre, prüfen Sie den Zustand normal, dann scheitern und Rückkehr aus dem test, wenn es falsch ist.
Etwas wie dieses:
Könnten Sie wickeln diese in eine Helfer-makro zur Erhaltung der Lesbarkeit.
BDD-test-Bibliotheken wie Kiwi eleganter für diese Art der Sache, wie Sie es leichter machen, zu teilen-setup zwischen den vielen tests, die führt zu weniger assertions pro test.
InformationsquelleAutor der Antwort Chris Devereux
Ich bin in der Lage zu verwenden
continueAfterFailure
und lassen Sie die anderen tests, die durch die Nutzung dieser Muster:InformationsquelleAutor der Antwort Pascal Bourque
Im Swift-Projekte verwende ich eine helper-Funktion (definiert in eine gemeinsame Oberklasse für alle meine tests, die sich erstreckt
XCTestCase
):Wie der Kommentar schon andeutet, ist der Aufruf
fatalError
ist eigentlich nie ausgeführt;XCTFail
bricht den test in einer geordneten Weise (tearDown
heißt, Nächster test läuft, etc.). Der Aufruf ist nur da, um trick der compiler in der AnnahmeNever
als Gegenleistung geben, daXCTFail
zurückVoid
(es hat zurück, wenncontinueAfterFailure == true
).Beachten Sie, dass
self.continueAfterFailure
auf den Standardwert zurückgesetzttrue
für jede test-Methode. Sie können auch machen, dass explizite insetUp()
.InformationsquelleAutor der Antwort Raphael