Javaによるテスト入門
Maria Milusheva
Senior Software Engineer
重要な概念は 2 つ:
ユニット — アプリの最小のテスト可能部分(例: メソッド)
ユニットテスト — アプリの他部分から切り離し、単一の「ユニット」の正しさを検証するテスト
注意:
ユニットテストは大局ではなく小さなロジックに焦点を当てます
他のテスト種別は大局に焦点を当てます(例: 統合テスト)
JUnit は主用途がユニットテストであることから名付けられました



assertTrue() は条件が true であることを確認します: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // エラーなし
assertFalse() はその逆を確認します:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // エラーなし
null 変数は NullPointerException を引き起こす可能性があります。
変数が null かどうかを確認するアサーション — assertNull() と assertNotNull()
よくある用途: 外部から取得した値が null でないことの確認
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// エラーなし
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
ArrayIndexOutOfBoundsException が送出されることを検証したいとします:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit には複数の方法があります。
JUnit には assertThrows() がありますが、高度な Java 構文(ラムダ式)を使います
代わりに次のように assertInstanceOf() を使えます:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// 期待する例外クラスと実際の例外を渡す
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
一般的なプロジェクトには数百のユニットテストがあります
テストは軽量で、理解しやすい必要があります
失敗時に何が問題か一目でわかる情報量の多い名前にします
例: methodUnderTest_expectedBehavior_conditions()
Javaによるテスト入門