2010-08-11 114 views
32

我的意圖是在the API中使用assertArrayEquals(int[], int[])中描述的JUnit方法來驗證我的類中的一個方法。在單元測試中使用assertArrayEquals

但是Eclipse向我展示了它無法識別這種方法的錯誤消息。這兩個進口到位:

import java.util.Arrays; 
import junit.framework.TestCase; 

我錯過了什麼嗎?

+0

什麼版本的JUnit你使用這可能是有用的?你之前使用過JUnit斷言嗎?您確定要進行單元測試,而不是'java.util.Arrays.equals/deepEquals'方法? – polygenelubricants 2010-08-11 12:12:05

+0

坦率地說,我不知道我使用的是哪個版本的JUnit,但我知道我已經下載了Eclipse版本:3.5.1,並且包含了JUnit。我之前沒有使用JUnit斷言,我只是在學習。是的,我想單元測試。 – Eugene 2010-08-11 12:27:16

+0

我發現了 - 它是JUnit3。 – Eugene 2010-08-11 12:33:10

回答

42

這應該使用JUnit 4工作:

import static org.junit.Assert.*; 
import org.junit.Test; 

public class JUnitTest { 

    /** Have JUnit run this test() method. */ 
    @Test 
    public void test() throws Exception { 

     assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3}); 

    } 
} 

(答案是基於this wiki article


這是舊JUnit框架相同的測試(JUnit 3):

import junit.framework.TestCase; 

public class JUnitTest extends TestCase { 
    public void test() { 
    assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3}); 
    } 
} 

注意不同之處:no註解和測試類是TestCase的子類(它實現了th e靜態斷言方法)。

+1

它是JUnit3 ,但我收到消息:描述\t資源\t路徑\t位置\t類型 類型DeckTest未定義方法assertArrayEquals(int [],int []) – Eugene 2010-08-11 12:37:18

+0

是否正在擴展TestCase?請發佈示例代碼,以顯示相關課程。 – 2010-08-11 13:42:37

+1

@AndoidNoob - 在JUnit 4中引入了Assert @ assertArrayEquals。因此,您必須切換到JUnit 4(始終推薦),或者驗證數組是否與具有幾個Java語句的數組相等(在確認後循環訪問數組)大小相同) – 2010-08-11 13:44:51

5

嘗試添加:

import static org.junit.Assert.*; 

assertArrayEquals是一個靜態方法。

0

如果你正在寫的JUnit 3.x的風格測試延伸TestCase,那麼你就需要使用Assert預選賽 - TestCase的擴展維護自己的地位,因此這些方法都可以沒有限定。

如果您使用JUnit 4註釋,避免使用TestCase基類,那麼需要Assert限定符以及導入org.junit.Assert。在這些情況下,您可以使用靜態導入來避免限定符,但這些被一些人認爲是poor style

28

,如果你想使用只是沒有的assertEquals根據您的JUnit版本

assertTrue(Arrays.equals(expected, actual));