Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

assertj / Java comparing objects with list field ignoring order of elements in list

Tags:

I am looking to compare 2 list of objects (say Foo) in test.

List<Foo> fooA;
List<Foo> fooB;

Each Foo entry has one of the fields of type List (say Bar)

class Foo {
  private List<Bar> bars;
  ....
}

assertThat(fooA).isEqualTo(fooB);

Comparison fails because elements of bars are same but in different order.

Is there a way to compare them ignoring order?

I am not looking for below option.

assertThat(fooA).usingElementComparatorIgnoringFields("bars").isEqualTo(fooB);

Ideally I would like to compare all the fields

like image 449
Random Avatar asked Dec 10 '18 16:12

Random


1 Answers

What you are looking for is containsExactlyInAnyOrderElementsOf(Iterable) defined in IterableAssert (emphasis is mine) :

Verifies that the actual group contains exactly the given values and nothing else, in any order.

You could write so :

List<Foo> fooA;
List<Foo> fooB;
//...
assertThat(fooA).containsExactlyInAnyOrderElementsOf(fooB);
like image 123
davidxxx Avatar answered Oct 19 '22 08:10

davidxxx