javaunit-testingassertj

Assert same condition on all elements of a collection


I'm working with AssertJ and I need to check that all objects in a list have intField > 0. Something like this:

assertThat(myObjectList).extracting(p -> p.getIntField()).isGreaterThan(0);

What's the correct way to achieve this? Should I use some other library?


Solution

  • Option 1:

    Use allMatch(Predicate):

    assertThat(asList(0, 1, 2, 3))
        .allMatch(i -> i > 0);
    
    java.lang.AssertionError: 
    Expecting all elements of:
      [0, 1, 2, 3]
    to match given predicate but this element did not:
      0
    

    Option 2 (as suggested by Jens Schauder):

    Use Consumer<E>-based assertions with allSatisfy:

    assertThat(asList(0, 1, 2, 3))
            .allSatisfy(i ->
                    assertThat(i).isGreaterThan(0));
    

    The second option may result in more informative failure messages.

    In this particular case the message highlights that some elements are expected to be greater than 0

    java.lang.AssertionError: 
    Expecting all elements of:
      [0, 1, 2, 3]
    to satisfy given requirements, but these elements did not:
    
    0
    error: 
    Expecting actual:
      0
    to be greater than:
      0