JUnit Mockito ReflectionEquals on List of Objects



我需要测试返回的对象列表是否与预期值相同。由于我不想仅仅为了测试而重写equals方法,我正在寻找一个按值比较类的解决方案。我找到了ReflectionEquals类,但这不适用于列表。有没有其他方法来测试这一点?

@Test
public void testUseOnFieldWithRuleApplied() {
List<Field> argumentFields = new ArrayList<>(Arrays.asList(new Field(1), new Field(2)));
List<Field> expectedFields = new ArrayList<>(Arrays.asList(new Field(0), new Field(1)));
List<Field> returnedFields = this.toBeTestedRule.useOnFields(argumentFields);
assertTrue(new ReflectionEquals(expectedFields).matches(returnedFields));    
}

使用fest断言库。

使用该库,您可以编写以下内容:

Assertions.assertThat(list1).isEqualTo(list2);

但这仍然依赖于列表的equals方法。

另一种方法可能是编写:

Assertions.assertThat(list1).containsExactly(list2.toArray());

Assertions.assertThat(list1).hasSize(list2.size()).containsSequence(list2.toArray());

最后一种可能性(containsSequence(并不依赖于列表的equals方法。

但是,我不明白你为什么不想依赖equals方法,因为它应该为每个列表正确实现。

这将出现在下一个AssertJ Core版本中:https://github.com/joel-costigliola/assertj-core/issues/1002

(可迭代/阵列支持(

assertThat(returnedFields).usingRecursiveComparison()
.contains(new Field(0), new Field(1));

最新更新