检查以下代码段:
assertThat(
Arrays.asList("1x", "2x", "3x", "4z"),
not(hasItem(not(endsWith("x"))))
);
这断言该列表没有不以“x”结尾的元素。当然,这是双重否定的说法,即列表的所有元素都以“x”结尾。
另请注意,该片段会抛出:
java.lang.AssertionError:
Expected: not a collection containing not a string ending with "x"
got: <[1x, 2x, 3x, 4z]>
这会列出整个列表,而不仅仅是不以“x”结尾的元素。
那么有没有一种惯用的方式:
- 断言每个元素都以“x”结尾(没有双重否定)
- 在断言错误时,仅列出那些不以“x”结尾的元素