JUnit でのユニットテスト

Javaによるテスト入門

Maria Milusheva

Senior Software Engineer

ユニットテストの定義

重要な概念は 2 つ:

ユニット — アプリの最小のテスト可能部分(例: メソッド)

ユニットテスト — アプリの他部分から切り離し、単一の「ユニット」の正しさを検証するテスト

Javaによるテスト入門

ユニットテストは詳細志向

注意:

  • ユニットテストは大局ではなく小さなロジックに焦点を当てます

  • 他のテスト種別は大局に焦点を当てます(例: 統合テスト)

  • JUnit は主用途がユニットテストであることから名付けられました

ユニットテストと本番コードの関係を直感的に示す図

Javaによるテスト入門

テストの種類 - 概観

  • 本コースでは主にユニット統合テストを扱います
  • ただし、テストの種類は他にも多数あります

ユニットテストなどの機能テストと、ユーザビリティテストなどの非機能テストを含むソフトウェアテストの図

Javaによるテスト入門

テストの種類 - 概観

  • 本コースでは主にユニット統合テストを扱います
  • ただし、テストの種類は他にも多数あります

ユニットテストなどの機能テストと、ユーザビリティテストなどの非機能テストを含むソフトウェアテストの図。こちらはユニットと統合テストに丸印あり

Javaによるテスト入門

JUnit の構文: assertTrue() と assertFalse()

  • assertTrue() は条件が true であることを確認します:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // エラーなし
  • assertFalse() はその逆を確認します:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // エラーなし
Javaによるテスト入門

assertNull() と assertNotNull()

null 変数は NullPointerException を引き起こす可能性があります。

  • 変数が null かどうかを確認するアサーション — assertNull()assertNotNull()

  • よくある用途: 外部から取得した値が null でないことの確認

Map<String, Integer> catalogue = new HashMap<>();

catalogue.put("item1", 10);

// エラーなし
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Javaによるテスト入門

例外のアサート

ArrayIndexOutOfBoundsException が送出されることを検証したいとします:

public String getIndex(String[] array, int index) {
    return array[index];
}

JUnit には複数の方法があります。

Javaによるテスト入門

assertInstanceOf()

  • JUnit には assertThrows() がありますが、高度な Java 構文(ラムダ式)を使います

  • 代わりに次のように assertInstanceOf() を使えます:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // 期待する例外クラスと実際の例外を渡す
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Javaによるテスト入門

ユニットテストの命名

  • 一般的なプロジェクトには数百のユニットテストがあります

  • テストは軽量で、理解しやすい必要があります

  • 失敗時に何が問題か一目でわかる情報量の多い名前にします

例: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Javaによるテスト入門

¡Vamos a practicar!

Javaによるテスト入門

Preparing Video For Download...