2017-10-03 4 views
1

In meinem Test habe ich einige Feature-Methoden, die nur in bestimmten Situationen ausgeführt werden müssen. Mein Code sieht in etwa wie folgt aus:Wie machen Sie eine Feature-Methode konditional?

class MyTest extends GebReportingSpec{ 

    def "Feature method 1"(){ 
     when: 
     blah() 
     then: 
     doSomeStuff() 
    } 

    def "Feature method 2"(){ 
     if(someCondition){ 
      when: 
      blah() 
      then: 
      doSomeMoreStuff() 
     } 
    } 

    def "Feature method 3"(){ 
     when: 
     blah() 
     then: 
     doTheFinalStuff() 
    } 
} 

Ich sollte anmerken, ich eine benutzerdefinierte spock Erweiterung verwende, die mir alle Feature Methoden einer spec laufen zu lassen, auch wenn eine vorherige Funktion Methode fehlschlägt.

Die Sache, die ich gerade realisiert habe und der Grund, warum ich diesen Beitrag mache, ist, weil "Feature method 2" aus irgendeinem Grund nicht in meinen Testergebnissen auftaucht, aber Methode 1 und 3 tun. Auch wenn someCondition auf True festgelegt ist, wird es in den Erstellungsergebnissen nicht angezeigt. so frage ich mich, warum dies so ist, und wie kann ich diese Funktion Methode abhängig machen

+0

"Ich sollte beachten, dass ich eine benutzerdefinierte Spock-Erweiterung verwende, die es mir ermöglicht, alle Feature-Methoden einer Spezifikation auszuführen, selbst wenn eine vorherige Feature-Methode fehlschlägt." das ist das normale Verhalten. Verwenden Sie '@ Stepwise' ohne wirklich sein Verhalten zu wollen? –

Antwort

3

Spock verfügt über spezielle Unterstützung für die Ausführung von Funktionen, sehen Sie sich @IgnoreIf und @Requires.

Sie können auch statische Methoden in der Bedingung schließen, müssen sie die qualifizierte Version verwenden.

0

dieses Problem zu beheben ich einfach gesagt ein, wenn/dann mit einem 10 ms Block schlafen vor dem if-Anweisung und jetzt, wo Feature Verfahren ausgeführt wird

1

Ihr Test wird nicht im Bericht angezeigt, da Sie die given, when, then Blöcke innerhalb einer Bedingung nicht haben können.

Sie sollten immer den Test ausführen, aber lassen Sie den Test ordnungsgemäß zum Scheitern verurteilt:

Verwenden Sie das @FailsWith Attribut. http://spockframework.org/spock/javadoc/1.0/spock/lang/FailsWith.html

@FailsWith(value = SpockAssertionError, reason = "Feature is not enabled") 
def "Feature method 2"(){ 

    when: 
    blah() 
    then: 
    doSomeMoreStuff() 
} 

Wichtig zu beachten, dass dieser Test als gegangenen wird, wenn es mit der angegebenen Ausnahme fehlschlägt. Und es wird auch gemeldet als bestanden, wenn das Feature aktiviert ist und der Test tatsächlich bestanden.