我需要测试返回的对象列表是否与预期值相同。由于我不想仅仅为了测试而重写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));