2009-12-21 86 views
0

我的JUnit測試應該檢查返回的數量是一樣的列表大小的JUnit返回int值

如果我的測試結果如下請問這是正確編碼,我覺得它不是因爲我最後兩行總會是真的嗎?

public void testGetTotalPilots() { 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    int size = list.size(); 

    assert size == list.size(); 
} 
+0

您正在使用錯誤的斷言 - 這是內置的Java關鍵字,而不是Junit Assert類。應該是Assert.Equals(size,list.size()); – Paolo 2009-12-21 09:40:42

+0

或者使用TestNG代替JUnit,其中使用'assert'有效 – 2009-12-21 09:53:26

回答

0

我不會說你的測試是正確的。

public void testGetTotalPilots() { 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    int size = 0; 

    assert size == list.size(); 
} 

上面的變化將確保您的測試總是會爲零,因爲看起來像預期的結果。如果它不是零,那麼測試將失敗。

3

你可以測試,例如,列表是否爲空(大小== 0)時,該列表的創建:

ArrayList<Pilot> list = new ArrayList<Pilot>(); 
assertEquals(0, list.size()); 
// or: assertTrue(list.isEmpty()); 

和/或你可能有些條目添加到列表中,檢查是否列表的大小相應地設置:

list.add(pilot1); 
list.add(pilot2); 
assertEquals(2, list.size()); 

編輯:

當單元測試列表(ArrayList),你應該想想該列表可以如何使用(測試場景)。例如,

  • 創建列表時,它應該是空
  • ,當一個項目被添加到一個空列表,它的大小應該是一個(事後)
  • 當列表包含了一個項目,除去這個項目應該是一個空列表
  • 等等...
1

當然你的測試首先需要做的事情,即觸發您正在測試填充試點對象的ArrayList中的代碼?所以,你會按如下方式編碼你的測試:

public void testGetTotalPilots() 
{ 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    // Invoke the code that populates the Pilot list 
    int size = 3; // Set this to the expected number 

    assertEquals(size, list.size()); 
} 

......否則你只是沒有測試任何東西。

+0

是的,原始問題只是測試Java ArrayList API是否工作正常 - 假設它可能是安全的。 – cyborg 2009-12-21 09:38:00

0

你在這裏測試的是ArrayList。爲什麼?我認爲花時間測試Java附帶的類的基本功能並且它們被廣泛使用並不是特別有用。

看着測試的名字,這個測試應該從其他地方得到列表,然後測試關於飛行員列表的假設。或者,正如我在你的其他文章中所說的那樣, List pilots = pilotDao.getAll(); pilots.add(新Pilot) 然後檢查是否對此發生了正確的反應,例如,如果不希望人們修改列表或隨後調用pilotDao.getAll();返回大小爲1的列表,則會引發異常。

3

assert是不能在測試中使用的Java語言功能。它僅通過運行時選項-ea進行評估!沒有這個選項,你的代碼不會測試請使用junit.framework.Assert的方法,如assertEquals()

另一方面,我不確定,你的測試應該測試什麼。 list.size()總是list.size()。你應該斷言一個數字。你也不需要測試ArrayList - 它可以工作。你的代碼在哪裏測試?

+0

這可能適用於JUnit,但還有其他測試框架。例如,在TestNG中,斷言是聲明斷言的首選方式,請參閱http://testng.org/doc/documentation-main.html#success-failure – 2009-12-21 09:48:35

+0

問題始於「我的Junit測試」。另外TestNG還有一個自己的斷言類(org.testng.Assert),文檔中還提供了斷言來使測試工作。 – 2009-12-21 10:49:55