2016-09-27 3 views
2

나는 항목 목록에 어서션을 쓰려고하는 곳에서 스팍 테스트를 작성했다. 의는 500와 동일한 경우 나는 목록에있는 모든 번호를 확인하려면 예를 들어 가정 해 봅시다 :spock의 목록에 어서션 만들기

def numbers = [1,2,3,4] 
numbers.each{ 
    assert it == 500 
} 

하면 다음과

Assertion failed: 

assert it == 500 
     | | 
     1 false 

가 어떻게에서 중지하지 않고 목록 주장을 할 수 반환 첫 번째 실패? 여기 내 주장을 동반하는 스팍 테스트는 다음과 같습니다!

def "Check if each number in a list is 500"{ 
given: "A list of numbers" 
def numbers = [1,2,3,4] 

expect: "each number to be 500" 
numbers.each{ 
    assert it == 500 
} 

그래서 나는 1 = 500, 2 = 500을 볼 수 내 스팍 테스트 보고서의 각 실패를보고 싶어 명확히하기 위해 등

또한 이런 식으로 뭔가를 할 수 있습니다

답변

3

:

@Unroll 
def "Check if #number is 500"(){ 
    expect: 
     number == 500 
    where: 
     number << [1,2,3,4] 
} 

가 확실하지 그

0123하지만 당신의 요구에 맞는 당신이 where 절과 @Unroll 에드 테스트로 실행할 수 없습니다 어떤 이유로, 당신이 뭔가에서이 같은 수용 가능한 결과를 얻을 수있는 경우
+0

이것은 실제로 스타일의 문제 일뿐입니다. 그러나'@ Unroll'을 사용하면 테스트 이름에 각각의 테스트 케이스에 대해 무언가를 포함시키고 싶습니다. 그래서 나는 아마도 당신이 선택한 이름 대신에 "#number가 500인지 검사한다."라고 이름을 지을 것입니다. – BalRog

+1

나는 더 나은 테스트 이름이 될 것이라고 생각하여 @BalRog 아이디어로 솔루션을 업데이트했습니다. –

+0

이것은 내가 원하는 것이지만 someList가 when 블록에 정의 된 목록 인'number << someList'를 수행하면, someList를 인식하지 못합니다. 왜 그런가? @BalRog @FranGarcia –

1

는 :

: 나는 그것을 실행하면

def "Check if each number in a list is 500"() { 
    given: "A list of numbers" 
    def numbers = [1,2,3,4] 

    expect: "each number to be 500" 
    numbers.collect { it == 500 }.every { it } 
} 

나는 다음과 같은 결과를 얻었다

Condition not satisfied: 

numbers.collect { it == 500 }.every { it } 
|  |      | 
|  |      false 
|  [false, false, false, false] 
[1, 2, 3, 4] 

    at WhateverSpec.Check if each number in a list is 500(WhateverSpec.groovy:10) 

조건 식의 두 번째 부분은 등호식이 목록의 모든 항목에 대해 거짓임을 나타냅니다. 세 번째 파트는 모든 것이 사실임을 보증하는 불리언 목록을 평가합니다 (물론 어떤 것도 명시 적으로 선언 할 필요없이 테스트가 실패하지 않도록합니다).