Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make assertions on a list in spock

Tags:

groovy

spock

I have written a spock test where I'm trying to make assertions on a list of items. Let's say as an example I want to check every number in a list if it is equal to 500:

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

Returns the following

Assertion failed:

assert it == 500
       |  |
       1  false

How can I make an assertion on a list without stopping at the first failure? Here is the spock test to accompany my assertion:

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
}

To clarify I want to see each failure in my spock test report

So I should see the 1 != 500, 2!= 500, etc.

like image 240
Mike Sallese Avatar asked Feb 07 '23 01:02

Mike Sallese


2 Answers

You can also have something like this:

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

Not sure that fits your needs though

like image 193
Fran García Avatar answered Mar 25 '23 04:03

Fran García


If for some reason you cannot run as an @Unrolled test with a where clause, you might get an acceptable result from something like this:

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

When I ran it I got the following result:

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)

Notice that the second part of the condition expression shows that your equality expression is false for every item in the list. The third part evaluates the list of booleans assuring that they are all true (which of course, they aren't, ensuring your test fails without having to explicitly assert anything).

like image 36
BalRog Avatar answered Mar 25 '23 06:03

BalRog