2017-05-29 42 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"))));