我正在尝试使用 Hamcrest,但经常遇到以下问题:
Hamcrest 匹配器是短路的,所以例如如果我写:
Assert.assertThat(list, everyItem(not(isIn(shouldNotBeInList))));
仅报告 shouldNotBeInList 的第一个错误元素。我希望测试能告诉我尽可能多的信息。
我可以在 hamcrest 中编写断言吗?它们报告得很好,以便报告所有不匹配的情况,或者我应该创建自己的匹配器或使用其他库吗?
示例输出
List<String> list = Arrays.asList("a", "b", "c");
List<String> shouldNotBeInList = Arrays.asList("c", "e", "a");
注意 c 没有错误消息
Expected: every item is not one of {"c", "e", "a"}
but: an item was "a"
最佳答案
Hamcrest 在可读错误消息方面有点棘手。一些匹配器会创建包含所有错误的有用消息,而其他匹配器(大多数)仅报告第一个错误。
当然,您可以使用“更好”的实现和良好的错误消息创建自己的匹配器。为一两个匹配器执行此操作是可以的,但这可能会导致重新实现 Hamcrest。
如果您可以选择使用其他库,请查看 AssertJ 。断言
Assertions.assertThat(list).doesNotContainAnyElementsOf(shouldNotBeInList);
给出此错误消息:
Expecting
<["a", "b", "c"]>
not to contain
<["c", "e", "a"]>
but found
<["c", "a"]>
关于java - hamcrest 中的严格匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40015862/