10

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?

davioooh
  • 23,742
  • 39
  • 159
  • 250

1 Answers1

20

Option 1:

Use allMatch(Predicate):

assertThat(asList(0, 2, 3))
    .allMatch(i -> i > 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> 
Expecting:
 <0>
to be greater than:
 <0> 
Denis Zavedeev
  • 7,627
  • 4
  • 32
  • 53
  • I didn't know `allMatch` method. That's exacly what I was looking for. Thank you very much! – davioooh Nov 29 '18 at 15:47
  • 3
    One may also use `allSatisfy` which allows to write a consumer containing assertions. This is a little more code but also more flexible and potentially results in better failure messages. – Jens Schauder Apr 17 '20 at 09:30
  • @JensSchauder thank you, added it as the second option to the answer – Denis Zavedeev Apr 18 '20 at 10:08