在 spock 中对列表进行断言

Make assertions on a list in spock

我编写了一个 spock 测试,我试图在其中对项目列表进行断言。举个例子,我想检查列表中的每个数字是否等于 500:

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

Returns以下

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 等等

你也可以这样:

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

但不确定是否符合您的需求

如果由于某种原因你不能 运行 作为带有 where 子句的 @Unrolled 测试,你可能会从这样的事情中得到一个可接受的结果:

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)

请注意,条件表达式的第二部分表明您的等式表达式对于列表中的每一项都是假的。第三部分评估布尔值列表,确保它们都是真的(当然,它们不是,确保您的测试失败而不必明确断言任何东西)。