2017-05-29 69 views
1

我用hamcrest库来测试代码和我想断言实际值(第一个参数)不等于两个指定的值(equalsTo方法中的“bad”和“good”)。如果实际值(assertThat方法的第一个参数)不等于“好”而不等于“不好”,它应该通过测试。 所以我尝试了以下声明:jUnit - 如何声明一个值不等于这两个值

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

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

+0

“我声称'好'不是'好'和'坏'在同一时间。”因为“好”是“好”,但不是“坏”,这个说法是成立的。 – Kriegel

回答

0

如果我明白你的问题,是一样的东西

assertEquals("good", !somethingToTest.equals("bad") && !somethingToTest.equals("good")); 
4

从我从你的问题让你不想提供的价值是在预设值的右侧列表?

如果这就是你想要的,你使用了错误的断言组合。上述

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

的代码会告诉你,如果在assertThat第一个参数不匹配,第二组匹配器在任何匹配器。

新论断的解释如下:

  1. 这将检查所提供的值“好”匹配任何值的“好”或“坏”(该anyOf匹配)
  2. 它如果而不是匹配器导致不正确,则它将抛出一个AssertionException异常,因此如果它是任何在步骤1中提供的匹配器抛出异常。
0

简单:只要确保实际值(变成一个元素集)不包含在某些预期集合中。

assertThat(Collections.singleton("good"), not(hasItem(Arrays.asList("bad", "good"))));