我使用hamcrest库测试代码,我想断言实际值(第一个参数)不等于两个指定值(equalTo方法中的“坏”和“好”)。如果实际值(assertThat方法的第一个参数)不等于“良好”且不等于“不良”,则应该通过测试。
所以我尝试了以下语句:

 @Test
public void valueNotEqualToBoth() {
    assertThat("good", not(allOf(equalTo("bad"), equalTo("good"))));
}


但是事实证明它通过了测试,但是我所例外的是它不应该通过。因为第一个参数等于“好”。

最佳答案

从我从您的问题中得到的结果来看,您不希望提供的值在预设值列表中吗?

如果那是您想要的,那么您使用的是错误的断言组合。

assertThat("good", not(anyOf(equalTo("good"), equalTo("bad")));


上面的代码将告诉您assertThat中的第一个参数是否与第二组匹配器中的任何匹配器都不匹配。

新断言的解释如下:


这将检查所提供的值“ good”是否与任何值“ good”或“ bad”(anyOf匹配项)匹配
它将反转该匹配的结果,因此true变为false并且false变为true(非匹配器)
如果not matcher结果不为true,它将抛出AssertionException,因此,如果它是步骤1中提供的matchers中的any,则会引发异常。

10-06 07:01