Ich schreibe Komponententest mit Spock für groovy-2.0 und benutze Gradle zum laufen. Wenn ich nach dem Testpass schreibe.
%Vor%myMethod () ist eine einfache Methode in der DSLValidator-Klasse, die einfach true zurückgibt.
Aber wenn ich eine setup () -Funktion schreibe und das Objekt in setup () erstelle, schlägt mein Test fehl: Gradel sagt: FAILED: java.lang.NullPointerException: Kann die Methode myMethod () auf Null-Objekt
nicht aufrufenIm Folgenden sehen Sie, wie es mit setup (),
aussieht %Vor%Kann jemand helfen?
Hier ist die Lösung für das Problem:
%Vor%In Spock Objekte, die in Instanzfeldern gespeichert sind, werden nicht zwischen Feature-Methoden geteilt. Stattdessen erhält jede Feature-Methode ein eigenes Objekt.
Wenn Sie ein Objekt zwischen Feature-Methoden teilen müssen, deklarieren Sie ein @Shared
-Feld .
Es gibt 2 Fixture-Methoden zum Einrichten der Umgebung:
%Vor% Ich verstehe nicht, warum das zweite Beispiel mit setupSpec()
funktioniert und schlägt mit setup()
fehl, weil es in der Dokumentation enthalten ist sagt etwas anderes:
Hinweis: Die Methoden setupSpec () und cleanupSpec () verweisen möglicherweise nicht Instanzfelder.