Ich möchte etwas ausführen, wenn der Spock-Test fehlschlägt. Insbesondere, nehmen Sie einen Screenshot. Ist es möglich? Wie es geht?Eine Aktion ausführen, wenn der Spock-Test fehlschlägt
Antwort
erstellen Listener-Klasse
class ExampleListener extends AbstractRunListener {
def void error(ErrorInfo error) {
println "Actual on error logic"
}
}
dann fügen Sie es jede Spezifikation mit Implementierung von IGlobalExtension
, die für jeden Spec
class GlobalSpecExtension implements IGlobalExtension {
@Override
void visitSpec(SpecInfo specInfo) {
specInfo.addListener(new ExampleListener())
}
}
ausgeführt wird
und schließlich erstellen Sie die Datei mit dem Namen org.spockframework.runtime.extension.IGlobalExtension
in Ihrem META-INF/services directory
(in der Regel wird es unter src/test/resources
, wenn Sie Maven verwenden) mit dem vollständigen Namen Ihrer IGlobalExtension
Implementierung z
com.example.tests.GlobalSpecExtension
Der beste Weg, dies zu erreichen, ist eine (globale oder Annotation-getriebene) Spock-Erweiterung zu schreiben, die eine AbstractRunListener
implementiert und registriert. Ein Beispiel finden Sie unter OptimizeRunOrderExtension. Informationen zum Registrieren einer globalen Erweiterung finden Sie unter dem Deskriptor IGlobalExtension.
Es gibt nicht viel Dokumentation zu Erweiterungen, da die APIs noch Änderungen unterliegen können. Wenn Sie auf Nummer sicher gehen wollen (und mit einigen Einschränkungen leben können), können Sie stattdessen eine JUnit Rule implementieren.
Ein Problem, das in beiden Fällen auftreten kann, ist, dass sie keinen Zugriff auf die aktuelle Spec-Instanz bieten. Wenn Sie dies benötigen, müssen Sie möglicherweise sowohl AbstractRunListener
(um über den Fehler benachrichtigt zu werden) als auch IMethodInterceptor
(um die Spec-Instanz zu erhalten) verwenden, die beide von derselben Erweiterung registriert wurden. (Sollte dies nicht hart sein, aber das ist, was zur Zeit da ist.)
Hallo Peter! Wie würde ich diese beiden kombinieren, um eine beschädigte Treiberinstanz ungültig zu machen und möglicherweise neu zu erstellen? In Cloud-Tests, wenn ich etwas wie 'WebDriverException: Session [...] wegen TIMEOUT beendet bekomme', kann ich den Fehler im Listener abfangen und protokollieren, habe aber keinen Zugriff auf' Treiber' oder eine Treiberfabrik den Cache von was ich für ungültig erklären kann. Irgendwelche Ideen? – kriegaex
Ich habe es geschafft, es auf diese Weise zu tun: ist
class ExampleTest extends GebSpec{
static boolean success = false
def setup(){
success = false
}
def cleanup(){
assert success == true, someAction()
}
def someAction(){
}
def "TestCase"(){
expect:
/*What you expect here*/
(success = true) != null
}
}
Vor jedem Testfall "Erfolg" durch das Setup() -Methode auf false gesetzt. Am Ende jedes Testfalls fügen Sie die Anweisung "(success = true)! = Null" hinzu. Daher gilt "Erfolg" nur, wenn der Testfall bestanden ist. Nach jedem Testfall überprüft die cleanup() - Methode, ob "success" wahr ist. Wenn es nicht die Methode ist, wird someAction() aufgerufen.
Ich kann die Antwort von user3074543 nicht aufwerten oder kommentieren, aber es ist einfacher als das Erstellen einer Erweiterung. Ich will einfach. Also habe ich user * ein wenig gekürzt (ich meine nicht die 1-Zeilen-Methode). Sie können die Logik vereinfachen, indem Sie Fehler statt Erfolg aufzeichnen und die Eingabe mit einem Helfer done() reduzieren.
class Test extends spock.lang.Specification {
def fail
def setup(){ fail = true }
def done(){ !(fail = false) }
def cleanup(){ fail && doStuffWhenFail() }
def 'test things'(){
expect:
stuff
done()
}
}
- 1. Oozie Workflow was passiert ist, wenn eine Aktion fehlschlägt
- 2. Kann ich MySQL erfolgreich ausführen, wenn eine Unterabfrage fehlschlägt und fehlschlägt, wenn die Unterabfrage erfolgreich ist?
- 3. Ausführen einer Aktion, wenn die Seite
- 4. Aktion ausführen, wenn das Fensterprotokoll für eine Site leer ist
- 5. Aktion ausführen, wenn der UIButton-Status geändert wird
- 6. Eine Aktion ausführen, wenn ein Ton in AVAudioPlayer wiedergegeben wurde?
- 7. Eine Aktion ausführen, wenn die Eingabe den Anforderungen entspricht
- 8. Aktion ausführen, wenn div Blätter Bildschirm (Jquery)
- 9. Stoppen und zurücksetzen, wenn eine der mehreren vorbereiteten Anweisungen fehlschlägt
- 10. Ausführen der Aktion nach der Fragmenttransaktionsanimation
- 11. Teamcity + Xcode 6 - Run-Test Aktion fehlschlägt
- 12. Abbrechen onListItemClick() wenn onCreateContextMenu() fehlschlägt
- 13. Code vor der Aktion des Controllers ausführen
- 14. Sellerie Kette bricht, wenn eine der Aufgaben fehlschlägt
- 15. Aktion ohne Weiterleitung ausführen
- 16. Eine E-Mail senden, wenn wget fehlschlägt
- 17. Was passiert, wenn der shared_ptr-Konstruktor fehlschlägt?
- 18. Wenn assert() fehlschlägt, was ist der Programmbeendigungscode?
- 19. Kann eine Webanwendung eine Aktion über Bluetooth ausführen?
- 20. Befehle von Shell-Skript ausführen fehlschlägt
- 21. MSBuild: Dateien kopieren (wenn geändert) und dann eine Aktion ausführen (nur wenn Dateien aktualisiert wurden)
- 22. Unix-Skript zum Archivieren von Protokollen - alle Befehle ausführen, auch wenn eine fehlschlägt
- 23. Was passiert, wenn ein Trigger fehlschlägt?
- 24. Jquery: Wenn das Element ausgeblendet ist, Aktion ausführen?
- 25. Warnen, wenn gespeicherte Prozedur fehlschlägt
- 26. bestimmte Aktion ausführen, wenn Variable in TCL geändert wird
- 27. Doctrine listener - Aktion nur ausführen, wenn ein Feld geändert wurde
- 28. Toast-Nachricht anzeigen und eine Aktion ausführen Wenn eine bestimmte Zeitspanne abgelaufen ist
- 29. jquery javascript: Aktion ausführen, wenn Optionsfeld ausgewählt ist
- 30. Wie Sie eine andere .exe überwachen und eine Aktion ausführen, wenn sie geschlossen wird
Was ist der Grund für die Erstellung einer Datei mit dem Namen des Pakets im Verzeichnis services? – eddyrokr