Reputation: 345
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
Upvotes: 13
Views: 18106
Reputation: 2409
you can do this with assertJ:
assertThat(fooA).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(fooB)
Upvotes: 14
Reputation: 131346
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);
Upvotes: 3