首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JUnit 4 入門指南:註解驅動的單元測試新時代

     編輯:Java 程式設計入門

為什麼選擇 JUnit 4?

JUnit 4 是測試框架歷史上最大一次革新,核心目標是利用 Java 5 的 Annotation(註解)特性徹底簡化測試編寫。告別強制繼承 TestCase、方法名必須以 test 開頭的束縛,擁抱更靈活、更語義化的測試風格。

官方下載

🔗 JUnit 4.5 官方下載頁面

從 JUnit 3 到 JUnit 4 的範式轉移

舊時代:JUnit 3 風格

public class AddOperationTest extends TestCase {
    public void setUp() throws Exception {}
    public void tearDown() throws Exception {}

    public void testAdd() {
        AddOperation instance = new AddOperation();
        assertEquals(0, instance.add(0, 0));
    }
}

痛點:必須繼承 TestCase、測試方法強制 test 前綴、靜態導入雖簡化斷言但結構仍顯笨重。

新時代:JUnit 4 註解風格

import org.junit.*;

public class AddOperationTest {
    @Before
    public void setUp() throws Exception {}

    @After
    public void tearDown() throws Exception {}

    @Test
    public void add() {
        AddOperation instance = new AddOperation();
        assertEquals(0, instance.add(0, 0));
    }
}

亮點:

  • ✅ 無需繼承 任何基類,POJO 即可測試。
  • ✅ 方法命名自由,靠 @Test 識別測試點。
  • ✅ 生命周期註解:@Before/@After 替代 setUp/tearDown,每個測試方法前後各執行一次。

核心註解詳細解讀

註解用途關鍵屬性/行為
@Test標記測試方法expected=Exception.class 驗證拋出異常;timeout=毫秒 超時失敗
@Before每測試方法前執行僅允許一個,替代 setUp()
@After每測試方法後執行僅允許一個,替代 tearDown()
@Ignore暫時禁用測試可附原因:@Ignore("尚未實現"),報告中顯示原因而非失敗
@BeforeClass類加載前一次性執行方法必須 static,適合昂貴資源初始化(JUnit 4.4+)
@AfterClass所有測試後一次性執行方法必須 static,資源釋放

進階用法示例

@Test(expected = IllegalArgumentException.class)
public void testInvalidInput() {
    calculator.divide(1, 0); // 預期拋出異常
}

@Test(timeout = 100)
public void testPerformance() {
    heavyComputation(); // 必須在 100ms 內完成
}

@Ignore("依賴外部數據庫,暫時跳過")
@Test
public void testWithDatabase() { ... }

靜態導入小技巧

import static org.junit.Assert.*; 讓 assertEquals、assertTrue 等斷言方法可直接調用,代碼更乾淨。

遷移建議

  • 新項目直接使用 JUnit 4+ 註解風格。
  • 舊項目可漸進式遷移:JUnit 4 運行器兼容 JUnit 3 風格測試,可共存。
  • 善用 @Ignore 管理技術債,避免註釋掉測試代碼導致維護失控。
JUnit 4 讓測試代碼回歸業務語義,減少框架樣板代碼干擾,是提升測試可讀性與維護性的關鍵一步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved