JUnit 由 Erich Gamma 與 Kent Beck 開發,JBuilder 整合並擴展此框架。其廣受推崇的原因在於:實戰性強、功能強大,且極度簡單——具備生命力的框架必備特質。
核心價值:提供豐富斷言方法(assertEquals()、assertNull()、assertTrue() 等)自動驗證測試規則,取代傳統 System.out.println() 人工觀察模式。
三大核心類別:
run(TestResult) 方法。public void testXxx() 方法,內部以 assertYyy() 定義規則。測試固件是測試用例執行所需的「工作物件群」。JUnit 執行流程:
setUp() 初始化testXxx() 測試方法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 執行器包含:測試類別輸入欄、進度條與統計數、錯誤/失敗列表(點選可看堆疊追蹤)。
JBuilder 增強: 提供右鍵直接執行測試用例/套件,並內建功能更強大的 JBTestRunner,支援 JUnit 的文字與 Swing 執行器。