您可以结合is
和equalTo
匹配器库。assert 语句看起来更长,但错误消息更好。由于contains
是先失败,因此它在发现第一个不匹配时会中断,并且不会在列表的下方找到失败。在哪里is
以及equalTo
将打印您从中看到所有不匹配的整个列表。
使用示例contains
List<String> list = Arrays.asList("foo", "bar", "boo");
assertThat(list, contains("foo", "boo", "bar"));
给出以下错误消息:
Expected: iterable containing ["foo", "boo", "bar"]
but: item 1: was "bar"
使用示例is and equalTo
List<String> list = Arrays.asList("foo", "bar", "boo");
assertThat(list, is(equalTo(Lists.newArrayList("foo", "boo", "bar"))));
给出以下错误消息:
Expected: is <[foo, boo, bar]>
but: was <[foo, bar, boo]>
第二种方法不会告诉您不匹配的索引,但对我来说这仍然更好,因为您只需查看一次失败消息即可修复测试。而在方法一中,您将首先修复索引 1,运行测试,检测索引 2 处的不匹配并进行最终修复。