# 10.3. 単体テストの実行

## 10.3.1. テストの実行方法

本節では、JUnitの実行方法として、

- IDE上でJUnitを実行する方法

- MavenでJUnitを実行する方法

の2種類を説明する。用途に応じていずれかを選択されたい。

テスト実行方法 | 説明
--- | ---
IDE | IDE上からJUnitを実行する。
Maven | `mvn test`コマンド を使用してJUnitを実行する。

IDE上からJUnitを実行する場合は、IDE上で製造からテストまで行うことができるため、テスト対象への参照も容易となる。

`mvn test`コマンドを使用してJUnitを実行する場合は、コマンドベースで実行するため、CIサーバ上でのテストの自動化が可能となる。

## 10.3.2. テストの実行

### 10.3.2.1. IDE上でテストを実行

STSを用いてJUnitを実行する方法を紹介する。

#### 10.3.2.1.1. テストクラスの実行

テストクラスを右クリックし、メニューを表示させる。

メニューから[Run As] -> [JUnit Test]を選択し、対象テストクラスを実行する。

不具合なくテストが実行されれば、以下のような画面が表示される。

アサーションエラーの場合、 以下のようにエラーメッセージが表示される。

テストを実行する上でエラーが発生した場合、 以下のようにエラーメッセージが表示される。

Note

テストの失敗について

テストの失敗には大きく分けて2種類の要因がある。

- アサーション時に失敗する（Failure）

- テストの実装や、実行環境などに不備があり実行が失敗する（Error）

IDEでJUnitを実行した際の実行結果画面には、これら2種類の結果の違いを示すだけでなくスタックトレースも合わせて表示されるため、何が原因でテストが失敗したのかを分析する際に役立つ。

#### 10.3.2.1.2. プロジェクト、メソッド単位で実行

JUnitの実行はプロジェクト単位、メソッド単位でも可能である。

プロジェクト単位で実行する場合は、テストしたいプロジェクトを右クリックしてメニューを表示させる。

メニューから[Run As] -> [JUnit Test]を選択し、対象プロジェクトのテストを実行する。

プロジェクト単位で実行した場合は、選択したプロジェクトに含まれる全テストクラスの実行結果が表示される。

メソッド単位で実行する場合は、テストしたいメソッドを右クリックしてメニューを表示させる。

メニューから[Run As] -> [JUnit Test]を選択し、対象メソッドのテストを実行する。

メソッド単位で実行した場合は、選択したメソッドの実行結果のみが表示される。

### 10.3.2.2. Mavenでテストを実行

MavenでJUnitを実行する方法を紹介する。

#### 10.3.2.2.1. テストフェーズの実行

MavenでJUnitを実行する場合は、対象プロジェクト配下に移動し以下のコマンドを実行する。

    mvn test

コマンドを実行すると、`target/classes`配下にjavaコンパイルした.classファイルを作成したのち、`target/test-classes`配下にコンパイルしたテスト用.classファイルを作成し、`target/surefire-reports`配下にテスト結果が作成される。

デフォルトでは、以下のパターンにマッチするファイルが対象となりテストされる。

- `**/Test*.java`

- `**/*Test.java`

- `**/*Tests.java`

- `**/*TestCase.java`

上記パターンにマッチしないテストクラスを実行させたい場合は、`pom.xml`に設定を追加することで、テスト対象のファイルを変更することができる。また、テストファイルの除外についても設定することが可能である。

- `pom.xml`

    <project>

      // ommited

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M7</version>
            <configuration>
              <includes>
                <include>*ServiceCheck.java</include> <!-- (1) -->
              </includes>
              <excludes>
                <exclude>AccountServiceCheck.java</exclude> <!-- (2) -->
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>

      // ommited

    </project>

項番 | 説明
--- | ---
(1) | テスト実行時に実行対象となるファイルを設定する。
(2) | テスト実行時に除外対象となるファイルを設定する。

Note

設定する際には、正規表現を使って指定することもできる。

詳細は maven-surefire-plugin (Regular Expression Support)を参照されたい。

#### 10.3.2.2.2. コマンドオプションによる任意クラス、メソッドの指定

`mvn test`コマンドはオプションを用いることで任意のクラス、メソッドを指定し実行することもできる。

テスト対象のクラスを指定する場合は、以下のコマンドを用いて指定できる。

    mvn test -Dtest=[クラス名]

「,」 区切りで複数クラスを指定することもできる。

    mvn test -Dtest=[クラス名],[クラス名],[クラス名]...

テスト対象のメソッドを指定したい場合は、以下のコマンドを用いて指定できる。

    mvn test -Dtest=[クラス名]#[メソッド名]

クラス名には、FQCN指定（`com.example.domain.repository.MemberRepositoryTest`など）と単純クラス名での指定（`MemberRepositoryTest`など）のどちらで指定してもよい。また、クラス名にワイルドカード（`Member*Test`など）を用いてパターン指定することもできる。

Warning

メソッド単位の指定は `maven-surefire-plugin`のバージョンが2.7.3以上必要となる。

詳細は maven-surefire-plugin (Running a Set of Methods in a Single Test Class)を参照されたい。

Note

オプションに `-Dmaven.test.skip=true`を指定することでテストのコンパイル・実行をスキップすることができる。

実行のみスキップしたい場合は、`-DskipTests=true`を指定することでコンパイルのみ行われるようにすることもできる。