assertj / Java将对象与列表字段进行比较,忽略列表中元素的顺序

时间:2018-12-10 16:12:37

标签: java assertj

我希望比较测试中的2个对象列表(例如Foo)。

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

每个Foo条目都具有类型为List(例如Bar)的字段之一

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

assertThat(fooA).isEqualTo(fooB);

比较失败,因为条形元素相同但顺序不同。

有没有办法比较它们的忽略顺序?

我不在寻找以下选项。

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

理想情况下,我想比较所有字段

2 个答案:

答案 0 :(得分:3)

您要寻找的是IterableAssert中定义的containsExactlyInAnyOrderElementsOf(Iterable)(重点是我的):

  

验证实际组是否完全包含给定值,以及   没什么,以任何顺序

您可以这样写:

List<Foo> fooA;
List<Foo> fooB;
//...
assertThat(fooA).containsExactlyInAnyOrderElementsOf(fooB);

答案 1 :(得分:0)

你可以用 assertJ 做到这一点:

assertThat(fooA).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(fooB)