2016-12-12 4 views
0

Können wir when/then innen schreiben, wenn Bedingung im Spocktest ist? Code sieht so aus. Hier versuche ich die Berufung von wann und dann zu kontrollieren.Können wir `wenn` /` dann` innen schreiben, wenn Bedingung im Spocktest

def testMethod(){ 
    given: 
     if(some Condition) { 
      when: 
       eventOne Occurred 
      then: 
       assertion based on eventOne 
     } else if (some Condition) { 
      when: 
       eventTwo Occurred 
      then: 
       assertion based on eventTwo 
     } else { 
      when: 
       eventThree Occurred 
      then: 
       assertion based on eventThree 
     } 
    where: 
     iteration here. 
} 

Antwort

1

Was ist der Zweck? Der Ansatz given-when-then wurde entwickelt, um automatisierte Tests leichter verständlich zu machen. Das Beispiel, das Sie gezeigt haben, macht das Lesen und Verstehen Ihres Tests schwierig. Und ich würde sogar wetten, dass es nicht kompiliert wird.

Versuchen Sie, Ihre Tests einfach zu halten. where wird verwendet, um Parameter für Ihren Test bereitzustellen (parametrisierter Test), z.

@Unroll  
def "should return #result for parameters(#a,#b)"() { 

    when: 
     def result = someObject.someMethod(a, b) 

    then: 
     result == expected 

    where: 
     a   | b    || expected 
     null  | null   || false 
     ""   | ""   || false 
     "test"  | "foo"   || true 
} 

Der Hauptzweck hier ist es, das Verständnis der Testlogik so einfach wie möglich zu halten. Wenn Sie eine andere Kombination testen möchten, können Sie eine separate Testmethode erstellen.

1

Aus der Sicht von Spock finde ich keine Einschränkungen für Ihr konkretes Beispiel. Aus der Sicht der Lesbarkeit denke ich nicht, dass es der beste Weg ist, Spock zu benutzen - ich stimme der obigen Antwort zu.

Aber bitte der folgenden Einschränkung der Spock Etiketten bewusst sein (von here):

Ein Merkmal Verfahren mindestens eine explizite (dh markiert) blockieren haben muss - in der Tat, das Vorhandensein eines Expliziter Block macht eine Methode zu einer Feature-Methode. Blöcke unterteilen eine Methode in verschiedene Abschnitte, und kann nicht verschachtelt werden.

So logisch können Sie von Ihrem Beispiel denken als:

  1. gegeben - ist eine Aufbauphase;
  2. wann - dann von der ersten Bedingung;
  3. wenn-dann aus der zweiten Bedingung;
  4. Wann-dann aus der dritten Bedingung;
  5. wo - beschreibt die Datenversorgung;
Verwandte Themen