2016-08-23 2 views
1

Spock에서 색인을 테스트 할 수있는 방법이 있습니까? 나는이 같은 경우 블록이 있습니다spock을 사용하는 블록에서 인덱스를 테스트하는 방법은 무엇입니까?

나는 그것이 인덱스가 내 테스트에서 실행중인 얻을 수 있는지 알고 싶어
where: 
column1 | column2 
1 | 3 
1 | 4 
2 | 5 
6 | 8 

. 그래서 첫 번째 테스트 (1 | 3)를 실행하면 인덱스가 0이됩니다. 세 번째 테스트 (2 | 5)를 실행하면 인덱스가 2가됩니다.

내 검사에서이 색인을 얻으시겠습니까?

답변

1
당신은 테스트 이름에 다음 테스트 정의, @Unroll를 추가 할 필요가

아래 충분처럼 값이

@Unroll 
def "something #column1 and #column2"() { 
    ... 
} 
+0

그 자체가 아닙니다 ... 테스트 자체에 인덱스가 필요합니다. "if (indexBeingTested == 0), else if (indexBeingTested> 3), do"와 같은 작업을 수행하십시오. – Igor

+0

여기에 문서가 있습니다. https://spockframework.github.io/spock/docs/1.0/data_driven_testing.html –

+2

테스트에 다른 매개 변수를 추가해야하지만 이상한 것으로 보이는 특정 인덱스를 기반으로 특정 코드를 실행해야 할 수도 있습니다. 그 논리는 당신의 봉사에 있어야합니다. –

0

뭔가 출력 #column1을 넣어?

import spock.lang.* 

@Unroll 
class MyFirstSpec extends Specification { 

    def "column1 is #column1 and column2 is #column2 where index is #index"() { 
    expect: 
    if(index in [0, 1]) { 
     assert column1 < column2 
    } else { 
     assert column1 == column2 
    } 

    where: 
    [column1, column2, index] << [ 
     [1, 2, 4, 5], [2, 3, 4, 5] 
    ].transpose().withIndex()*.flatten()  
    } 
} 

실행이 Sample

참고 :
withIndex()은 2.4.0

+0

아주 나쁜 것만을 테스트하기 위해 많은 논리를 쓰고있는 것처럼 보입니다. 코드를 전달하려면 테스트 케이스에 최소 코드를 작성해야하며 그 반대의 경우도 마찬가지입니다. –

+0

정확히. 문제는 테스트에서 많은 논리를 쓰는 것이 좋은지 나쁜지를 알아내는 것이 아닙니다. 대답은 문제에 대한 실행 가능한 해결책 일뿐입니다. 테스트의 코드는 OP가 자신이 한 것처럼 질문을합니다. :) – dmahapatro

0

사소한 대답은 인덱스 또는 케이스 나 할 수있는 몇 가지 범주 변수를 추가하는 것입니다 그루비에서 사용할 수 있습니다 결과 섹션에서 확인하십시오.

where: 
    idx | column1 | column2 
    0 | 1  | 3 
    1 | 1  | 4 
    2 | 2  | 5 
    3 | 6  | 8 

는하지만 where 절은 아마도 단일 테스트의 모습에서 여러 테스트 케이스해야한다 무엇을 실행하는 데 사용되는 경우 궁금합니다.

idx는 expect/then 블록에서 실행할 검사를 테스트 코드에 알려서는 안되며 테스트중인 코드를 구동해서는 안됩니다.

시험은 입력의 순서가 있다면 다른 결과를 얻을 수있는 경우 : 주문 감도는이 테스트는 다른 무언가를 테스트하고 있음을 나타내는 것 때문에 다음

where: 
    idx | column1 | column2 
    0 | 6  | 8 
    1 | 2  | 5 
    2 | 1  | 4 
    3 | 1  | 3 

나는, 테스트가 깨진 될 필요가 생각 단지 column1과 column2 값의 쌍보다, where를 사용하는 것이 정확하게 적절하지 않습니다.

관련 문제