jUnit - 如何断言一个值不等于另一个值

Wac*_*hoo 1 java junit

我使用hamcrest库来测试代码,我想断言实际值(第一个参数)不等于2个指定值(equalTo方法中的"bad"和"good").如果实际值(assertThat方法的第一个参数)不等于"good"而不等于"bad",它应该通过测试.所以我尝试了以下声明:

 @Test
public void valueNotEqualToBoth() {
    assertThat("good", not(allOf(equalTo("bad"), equalTo("good"))));
}
Run Code Online (Sandbox Code Playgroud)

但事实证明它通过了测试,但我除外的是它不应该.因为第一个参数等于"好".

小智 5

从我从你的问题得到的你不希望提供的值在预设值列表中吗?

如果这是你想要的,你使用错误的断言组合.

assertThat("good", not(anyOf(equalTo("good"), equalTo("bad")));
Run Code Online (Sandbox Code Playgroud)

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

新断言的解释如下:

  1. 这将检查提供的值"good"是否匹配任何值"good"或"bad"(anyOf匹配器)
  2. 它将反转该匹配的结果,因此true变为false,false变为true(不匹配)
  3. 如果not matcher导致不为true,它将抛出AssertionException ,因此如果它是any,则在步骤1中提供的匹配器抛出异常.


Dam*_*ero 0

如果我理解你的问题,就像

assertEquals("good", !somethingToTest.equals("bad") && !somethingToTest.equals("good"));
Run Code Online (Sandbox Code Playgroud)