在spock中的列表上进行断言

时间:2016-09-27 15:45:07

标签: groovy spock

我写了一个spock测试,我试图在一个项目列表上进行断言。比方说,我想检查列表中的每个数字是否等于500:

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

返回以下内容

Assertion failed:

assert it == 500
       |  |
       1  false

如何在列表中进行断言而不会在第一次失败时停止?这是伴随我断言的spock测试:

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
}

澄清我希望在我的spock测试报告中看到每个失败

所以我应该看到1!= 500,2!= 500等等。

2 个答案:

答案 0 :(得分:4)

你也可以这样:

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

不确定是否符合您的需求

答案 1 :(得分:2)

如果由于某种原因你不能用@Unroll条款运行where ed测试,你可能会得到一个可接受的结果:

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)

请注意,条件表达式的第二部分显示列表中的每个项目的相等表达式都为false。第三部分评估布尔值列表,确保它们都是正确的(当然,它们不是,确保您的测试失败而不必明确断言)。