JUnit 3 靠 test* 命名慣例與反射發現測試;JUnit 4 改用 @Test 註解,方法命名完全自由:
@Test public void addition() { ... }
無需繼承 TestCase,搭配 static import 讓斷言呼叫更簡潔:
import static org.junit.Assert.assertEquals;
public class AdditionTest {
@Test public void addition() { assertEquals(2, 1+1); }
}
@Before / @After:每個測試前後執行,可多個、命名自訂、支援繼承鏈自動調用(父類別優先)。@BeforeClass / @AfterClass:類別層級一次性初始化/清理(需 static),適合昂貴資源(資料庫連線、大型資料結構)。舊寫法需 try-catch-fail;新語法:
@Test(expected = ArithmeticException.class)
public void divideByZero() { int n = 2 / 0; }
若需驗證例外細節(訊息、原因)仍須用傳統方式。
@Ignore:暫時停用測試,報告顯示「I」而非失敗。@Test(timeout=500):逾時自動失敗,防止網路/效能測試阻塞整組測試。assertEquals(Object[], Object[])。suite(),改用可變參數傳遞測試類別。JUnit4TestAdapter 包裝跑 JUnit 4 測試(但需 Java 5+)。Java 5 專案應盡快遷移;Java 1.4 專案維持 JUnit 3.8。JUnit 4 以註解簡化測試撰寫,降低門檻,鼓勵更多開發者撰寫測試。