davioooh
davioooh

Reputation: 24666

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?

Upvotes: 15

Views: 12475

Answers (1)

Denis Zavedeev
Denis Zavedeev

Reputation: 8297

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

Upvotes: 30

Related Questions