2012-01-05 146 views
83

我有一個java類,做一個二進制和,我仍然試圖找出如何做單元測試,但我不知道該怎麼做。我已經搜索了一遍,我得到的最好的解釋是從維基百科的頁面:http://en.wikipedia.org/wiki/Unit_testing如何編寫單元測試?

但我仍然不確定如何做這個程序的測試。程序所做的基本上是2字節[]並添加它們並返回新的二進制數組。用Java編寫。我如何測試它?

+4

您可以使用像[jUnit](http://www.junit.org/)這樣的工具併爲您的java類編寫測試用例(測試方法)。然後調用jUnit測試作爲構建過程的一部分(ant/maven)。使用jUnit並不難,最棘手的部分是想出儘可能多的測試場景,以便您能夠及早且經常地捕獲錯誤。 – CoolBeans 2012-01-05 23:46:47

回答

94
  1. 定義正常情況下的期望和期望的輸出,並輸入正確的輸入。

  2. 現在,通過聲明一個類實現測試,使用任何名字(通常是這樣TestAddingModule),以及testAdd方法添加到它(即類似下面):

    • 寫的方法,並在它上面添加@Test註釋。
    • 在該方法中,運行您的二進制和assertEquals(expectedVal,calculatedVal)
    • 通過運行測試您的方法(在Eclipse中,右鍵單擊,選擇Run as→JUnit test)。

      //for normal addition 
      @Test 
      public void testAdd1Plus1() 
      { 
          int x = 1 ; int y = 1; 
          assertEquals(2, myClass.add(x,y)); 
      } 
      
  3. 根據需要添加其它情況。

    • 測試如果存在整數溢出,則您的二進制和不會引發意外的異常。
    • 測試您的方法是否正常處理Null輸入(下面的示例)。

      //if you are using 0 as default for null, make sure your class works in that case. 
      @Test 
      public void testAdd1Plus1() 
      { 
          int y = 1; 
          assertEquals(0, myClass.add(null,y)); 
      } 
      
+0

1.是否需要@Test符號? 2.爲什麼不使用assertNotNull測試空輸入? 3.單元測試的結果在哪裏被捕獲?結果如何顯示給用戶? – user137717 2014-10-12 03:06:53

+7

是的,'@ Test'表示法是必需的。這是爲了向單元測試運行者發出信號,表示此方法代表單元測試並應執行。沒有用'@ Test'註解的方法不會被測試運行器執行。 – 2014-10-23 11:14:15

12

這是一個非常通用的問題,有很多的方法可以回答。

如果您想使用JUnit創建測試,您需要創建您的測試用例類,然後創建單個測試方法來測試您的類/模塊在測試下的特定功能(單個測試用例類通常與單個「生產「類),並在這些方法內部執行各種操作,並將結果與​​正確的結果進行比較。嘗試儘可能多地覆蓋角落案例尤爲重要。

在你的具體的例子,例如,您可以測試以下:

  1. 兩個正數之間的簡單相加。添加它們,然後驗證結果是您所期望的。
  2. 正數和負數之間的加法(它返回帶有第一個參數符號的結果)。
  3. 正數和負數之間的加法(它返回帶有第二個參數符號的結果)。
  4. 兩個負數之間的加法。
  5. 一個導致溢出的添加。

要驗證結果,可以使用org.junit.Assert類中的各種assertXXX方法(爲了方便起見,您可以執行'import static org.junit.Assert。*')。這些方法測試一個特定的條件,如果不驗證(通過特定的消息,可選),則測試失敗。你的情況

例TestCase類(沒有定義的方法內容):

import static org.junit.Assert.*; 

public class AdditionTests { 
    @Test 
    public void testSimpleAddition() { ... } 


    @Test 
    public void testPositiveNegativeAddition() { ... } 


    @Test 
    public void testNegativePositiveAddition() { ... } 


    @Test 
    public void testNegativeAddition() { ... } 


    @Test 
    public void testOverflow() { ... } 
} 

如果您不是用來編寫單元測試,而是通過寫即席測試,你再驗證測試代碼「可視化「(例如,您編寫了一個簡單的主要方法,接受使用鍵盤輸入的參數,然後打印出結果 - 然後您繼續輸入值並驗證結果是否正確),然後您可以開始編寫這樣的測試採用上面的格式,並使用正確的assertXXX方法驗證結果,而不是手動執行。這樣,如果您必須進行手動測試,您可以更輕鬆地重新運行測試。

42

爲了使單元測試爲您的項目,請按照(爲了寫這個測試我使用Eclipse)下列步驟操作:

1-點擊新建 - > Java項目。

Create Project

2-寫下你的項目名稱,並單擊Finish。

Create Project

3-把點擊你的項目。然後,點擊New - > Class。

Create Class

4-寫下你的類名,然後點擊完成。

Create Class

然後,完成類是這樣的:

public class Math { 
    int a, b; 
    Math(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 
    public int add() { 
     return a + b; 
    } 
} 

5-點擊文件 - >新建 - > JUnit測試案例。

Create JUnite Test

6-檢查設置(),然後點擊完成。 SetUp()將是您初始化測試的地方。

Check SetUp()

7單擊OK。

Add JUnit

8在這裏,我簡單地增加7和10。所以,我希望答案是17。完成您的測試課程,如下所示:

import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
public class MathTest { 
    Math math; 
    @Before 
    public void setUp() throws Exception { 
     math = new Math(7, 10); 
    } 
    @Test 
    public void testAdd() { 
     Assert.assertEquals(17, math.add()); 
    } 
} 

9-在包資源管理器中單擊您的測試類,然後單擊Run as - > JUnit Test。

Run JUnit Test

10-這是測試的結果。

Result of The Test

我希望它能幫助。

+0

愛你的答案,這是最好的「如何做」! – alisa 2017-07-12 16:47:39

+0

我很高興我的回答很有幫助。感謝您的評論。 – Mohammad 2017-07-12 18:01:35

0
public class FirtJunit { 

    @BeforeClass 
    public static void startUp() { 
     System.out.println("BeforeClass"); 
    } 
    @AfterClass 
    public static void shutDown() { 
     System.out.println("AfterClass"); 
    } 
    @Before 
    public void setup() { 
     System.out.println("Before"); 
    } 
    @After 
    public void tearDown() { 
     System.out.println("After"); 
    } 
    @Test 
    public void mul() { 
     System.out.println("Test for mul"); 
    } 
    @Test 
    public void div() { 
     System.out.println("Test for div"); 
    } 




}