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

JUnit 單元測試入門教程:從核心概念到 IDEA/Eclipse 實戰

     編輯:Java 相關知識

單元測試是保證代碼質量、重構安全網的基石。本文涵蓋測試分類、JUnit 核心 API、測試組織、IDE 集成、最佳實踐,助你建立測試驅動開發習慣。

一、 為什麼需要單元測試

  • 早期發現 Bug,降低修復成本(熵增控制)。
  • 重構自信:測試通過 = 行為未破壞。
  • 文檔化:測試代碼即最佳規格說明。
  • 設計驅動:難測試 = 設計有問題(高耦合、職責不清)。

二、 JUnit 4 核心註解與生命週期

註解執行時機用途
@BeforeClass類加載前一次昂貴資源初始化(DB 連接池)
@Before每個 @Test 前通用 fixture 構建
@Test測試方法核心驗證邏輯
@After每個 @Test 後資源清理
@AfterClass類卸載後一次釋放昂貴資源
@Ignore跳過暫時禁用測試

三、 斷言大全

assertEquals(expected, actual);           // 等值
assertEquals(expected, actual, delta);    // 浮點數容差
assertTrue(condition); assertFalse(condition);
assertNull(obj); assertNotNull(obj);
assertSame(expected, actual);             // 同一引用
assertArrayEquals(expected, actual);      // 數組
fail("message");                          // 強制失敗

四、 參數化測試與異常測試

@RunWith(Parameterized.class)
public class MathTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{{1,2,3},{2,3,5}});
    }
    private int a,b,expected;
    public MathTest(int a,int b,int expected){this.a=a;this.b=b;this.expected=expected;}
    @Test public void testAdd(){ assertEquals(expected, a+b); }
}

// 異常測試
@Test(expected = IllegalArgumentException.class)
public void testInvalidInput() { obj.method(null); }

// JUnit 5 斷言異常
assertThrows(IllegalArgumentException.class, () -> obj.method(null));

五、 IDE 集成與運行

  • IDEA:右鍵類/方法 → Run '...Test',或 Ctrl+Shift+F10。覆蓋率:Run with Coverage。
  • Eclipse:右鍵 → Run As → JUnit Test。覆蓋率:EclEmma 插件。
  • Maven:mvn test 自動掃描 src/test/java 下 *Test.java。

六、 最佳實踐原則

  • 測試命名:methodName_condition_expectedResult。
  • 單一斷言原則:一個測試驗證一個行為。
  • 測試隔離:無外部依賴(Mockito 模擬 DB/HTTP)。
  • AAA 模式:Arrange-Act-Assert 結構清晰。
  • 測試代碼同樣需重構,保持可讀性。

七、 總結

單元測試不是負擔,而是開發加速器。從今天開始,為每個新功能寫第一個測試,再寫實現代碼。JUnit 5 已成主流,建議新項目直接上手 Jupiter API(@BeforeEach、@DisplayName、assertAll 等現代特性)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved