Java 測試入門
Maria Milusheva
Senior Software Engineer
兩個關鍵概念:
Unit(單元)-應用程式中最小可測試部分,如方法
Unit testing(單元測試)-在不受應用程式其他部分影響下,驗證單一「單元」程式碼正確性的測試
重點:
單元測試關注小範圍邏輯,而非整體情境
其他測試類型關注整體(例如整合測試)
JUnit 的名稱來自其主要用途是單元測試



assertTrue() 用來檢查敘述為 true: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // No error
assertFalse() 檢查相反情況:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // No error
null 變數可能導致 NullPointerException!
斷言可檢查變數是否為 null:assertNull() 與 assertNotNull()
常見用途:檢查某處取得的值不是 null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
假設我們要驗證拋出 ArrayIndexOutOfBoundsException:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit 提供多種作法可達成!
JUnit 有 assertThrows(),但它使用進階 Java 語法(lambda 運算式)
也可以這樣用 assertInstanceOf():
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// 傳入預期的例外類別與實際例外
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
一個典型專案會包含數百個單元測試
測試應該輕量且容易理解
測試名稱應具資訊量,讓失敗時能一眼看出問題
例如:methodUnderTest_expectedBehavior_conditions()
Java 測試入門