2016-12-12 9 views
0

스팍 테스트에서 조건이라면 when/then을 쓸 수 있습니까? 코드는 다음과 같습니다. 여기에서 나는 언제 그리고 언제 부름을 통제하려고 노력하고있다.스포크 테스트에서 조건 일 경우`when// then then '을 쓸 수 있습니까?

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. 
} 

답변

1

이 기능의 목적은 무엇입니까? given-when-then 접근 방식은 자동 테스트를 더 쉽게 이해할 수 있도록 설계되었습니다. 당신이 보여준 예는 당신의 시험을 읽고 이해하게 만듭니다. 그리고 나는 그것을 컴파일하지 않을 것입니다.

테스트를 단순하게 유지하십시오. where은 테스트에 매개 변수를 제공하는 데 사용됩니다 (매개 변수화 된 테스트).

@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 
} 

여기서의 주된 목적은 테스트 로직을 가능한 한 간단하게 이해하는 것입니다. 다른 조합을 테스트하려면 별도의 테스트 방법을 만들 수 있습니다.

1

Spock의 관점에서 본인의 구체적인 예에 ​​대한 제한을 찾을 수 없습니다. 가독성 관점에서 Spock을 사용하는 가장 좋은 방법이라고 생각하지 않습니다. 위의 대답에 동의합니다.

그러나 ( here에서)를 스팍 레이블에는 다음과 같은 제한 사항에 유의하시기 바랍니다 :

특징 방법이 하나 이상 있어야합니다 (예 : 라벨) 을 차단 명시 적 - 사실에서,의 존재를 명시 적 블록은 메서드를 피쳐 메서드로 만드는 것입니다. 블록은 메소드를 다른 섹션으로 나눕니다. 은 중첩 될 수 없습니다..

그래서 논리적으로이 같은 예를 생각할 수있다 : 주어진

  1. - 세트 업 단계이다;
  2. 그 때 첫 번째 조건에서;
  3. 제 2 조건으로부터의 경우;
  4. 그 다음 제 3 조건으로부터의 경우;
  5. - 여기에는 데이터 공급 장치가 나와 있습니다.