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

JUnit 核心框架深度解析:從 TestCase 到 TestSuite

     編輯:Java 相關知識

JUnit 簡介

JUnit 由 Erich Gamma 與 Kent Beck 開發,JBuilder 整合並擴展此框架。其廣受推崇的原因在於:實戰性強、功能強大,且極度簡單——具備生命力的框架必備特質。

核心價值:提供豐富斷言方法(assertEquals()、assertNull()、assertTrue() 等)自動驗證測試規則,取代傳統 System.out.println() 人工觀察模式。

JUnit 類別結構

JUnit測試框架類結構

三大核心類別:

  • junit.framework.Test:測試介面,定義 run(TestResult) 方法。
  • junit.framework.TestCase:測試用例基類。業務測試類別繼承它,撰寫 public void testXxx() 方法,內部以 assertYyy() 定義規則。
  • junit.framework.TestSuite:測試套件,可捆綁多個 TestCase 或巢狀 TestSuite 批次執行。

測試固件

測試固件是測試用例執行所需的「工作物件群」。JUnit 執行流程:

  1. 建立測試用例實例
  2. 呼叫 setUp() 初始化
  3. 執行 testXxx() 測試方法
  4. 呼叫 tearDown() 清理資源

若多個測試方法共用同組物件,可在 setUp() 實例化、tearDown() 釋放。範例:

public class MoneyTest extends TestCase {
    private Money f12CHF, f14CHF, f28USD;
    protected void setUp() {
        f12CHF = new Money(12, "CHF");
        f14CHF = new Money(14, "CHF");
        f28USD = new Money(28, "USD");
    }
    protected void tearDown() {}
}

測試用例撰寫

測試方法必須為 public void testXxx(),執行器以反射尋找。單一方法可包含多條斷言:

public void testMoneyBag() {
    Money bag[] = { f12CHF, f28USD };
    MoneyBag expected = new MoneyBag(bag);
    assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
}

每個測試方法對應一個獨立實例執行,確保隔離性。

測試套件組裝

透過 TestSuite 將多個測試用例捆綁,支援巢狀組合(小筐裝大筐):

public class MoneyTestSuite extends TestCase {
    public MoneyTestSuite(String s) { super(s); }
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTestSuite(MoneyTest.class);
        suite.addTestSuite(MoneyBagTest.class);
        return suite;
    }
}

亦可用 suite.addTest(Test t) 加入單一測試或另一套件。執行套件即可自動批次跑完所有測試。

測試執行器

JUnit 內建三種標準執行器:

  • junit.textui.TestRunner:文字介面
  • junit.awtui.TestRunner:AWT 圖形介面
  • junit.swingui.TestRunner:Swing 圖形介面
AWT測試執行器

AWT 執行器包含:測試類別輸入欄、進度條與統計數、錯誤/失敗列表(點選可看堆疊追蹤)。

JBuilder 增強: 提供右鍵直接執行測試用例/套件,並內建功能更強大的 JBTestRunner,支援 JUnit 的文字與 Swing 執行器。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved