JUnit5を利用するためのMavenの設定

:::note alert

このページの設定は古くなっており、JUnit公式の[サンプルコード](https://github.com/junit-team/junit5-samples/tree/main)の pom.xml （Gradleなら build.gradle） ファイルの内容がよりシンプルになっているのでそちらを参照してください。
:::

MavenプロジェクトでJUnit5を利用するための設定に関する自分用メモ(2019.1.6時点)
アノテーションやテストコードの書き方は説明しないので、[こちら](https://junit.org/junit5/docs/current/user-guide/#writing-tests)を参照すること

# pom.xml

```xml:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>myTest</groupId>
    <artifactId>myTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>11</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.3.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
```

### JUnit5を動かすための最低条件

#### dependency(ライブラリー)

Junit Jupiter(org.junit.jupiter)の２つのモジュールを定義すれば、最低限Junit5でテストを書いて実行できる

- junit-jupiter-api  -> アノテーションや基本的なアサーション(assertEquals/assertTrueなど)記述する
- junit-jupiter-engine -> テストを実行する

#### plugin

maven-surefire-pluginのver 2.22.0以降を使う。

*IDEでテストを実行するときは不要だが、mavenでtestを実行するときはsurefireプラグインが無いと、テストを実行しない。

### その他の機能

#### アサーションライブラリ
assertThatやMatcherなどのアサーション機能を使いたい場合は、独自にサードパーティのアサーションライブラリ(AssertJ,Hamcrestなど)を追加する。

```xml:pom.xml
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.11.1</version>
            <scope>test</scope>
        </dependency>
```

#### パラメタライズドテスト
@ParametaraizedTestなどを利用したい場合は、juit-jupiter-paramsを追加することで利用できる。


```xml:pom.xml
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.3.2</version>
            <scope>test</scope>
        </dependency>
```

# IntelliJ IDEAでの実行

最新バージョン(執筆時点で２０１８．３)の場合、junit-jupiter-apiだけ定義すれば良い。
その他のIDEでJUnit5を実行するために必要なライブラリ(junit-platform-launcher, junit-jupiter-engine, and junit-vintage-engine)は、バンドルされているため、実行バージョンを変えたい時だけ定義すれば良い。


# 参考

[JUnit 5 User Guide](https://junit.org/junit5/docs/current/user-guide/)
[JUnit 4で消耗しているあなたに贈るJUnit 5入門](http://acro-engineer.hatenablog.com/entry/2017/12/07/120000)
[JUnit5メモ(Hishidama's JUnit5 Memo)](http://www.ne.jp/asahi/hishidama/home/tech/java/junit/5/index.html)
[junit5-samples/junit5-jupiter-starter-maven/](https://github.com/junit-team/junit5-samples/tree/master/junit5-jupiter-starter-maven)