MavenのテストコマンドでJUnit5テストが実行できない場合の対処法

# 現象

[こちらの拙記事](https://qiita.com/kasa_le/items/f5d5997e90691104d422)で、RESTfulAPIのUnitテストを作った。
IntelliJ上での実行は問題なかった。

ところが、コマンド`mvn test`すると、テストが空になってしまっている。

```console
$ mvn clean test
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
```

これは困った。最終的にはCIツールで動かすことが目的だからだ。

ということで、ググりまくりました。

# 参考ページ

- JUnit Setup Maven – JUnit 4 and JUnit 5
https://www.journaldev.com/21711/junit-setup-maven
  - JUnit4と5の違いを明記してあって分かりやすかった。
  - そしてたぶん、`additionalClasspathElements`が必要だったっぽい。
    - なぜなら、テストクラスは、`src/test/java/`下に置いていたから。(なんだデフォルトで見てくれないのか！？)

- JUnit 5 ユーザガイドの日本語訳
https://udzuki.jp/public/junit5-user-guide-ja/
  - 特に、**2.3. JUnit Jupiter サンプルプロジェクト**の項にあるサンプルプロジェクトが参考になりました。

# 結論

最終的に、`pom.xml`を以下のようにして、無事、コマンドでも通るようになりました。
(IntelliJ上からの実行にも問題ありません)
~~もしかしたら、不要なものもあるかもしれません。~~

**2020/03/13追記**
不要と判明した、以下二つの依存記述について、削除しました。
- junit-platform-surefire-provider
- junit-platform-runner


```xml:pom.xml
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>simple-webapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>simple-webapp</name>

    <build>
        <finalName>simple-webapp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <inherited>true</inherited>
                <configuration>
                    <source>11</source> <!-- ここ -->
                    <target>11</target> <!-- ここ -->
            </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <additionalClasspathElements>
                        <additionalClasspathElement>src/test/java/</additionalClasspathElement>
                    </additionalClasspathElements>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-binding</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <!-- JAXBはJDK9から外されました -->
        <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>

        <!-- テスト -->
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.test-framework.providers/jersey-test-framework-provider-grizzly2 -->
        <dependency>
            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
            <version>2.30.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.15.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <jersey.version>2.30.1</jersey.version>
        <junit.jupiter.version>5.6.0</junit.jupiter.version>
        <junit.platform.version>1.3.2</junit.platform.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
```

これで、

```console
$ mvn clean test

(省略)
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.524 s
[INFO] Finished at: 2020-03-11T00:01:17+09:00
[INFO] ------------------------------------------------------------------------
```

やったね！:v:

# 結果をHTMLに出す

どうせならテスト結果を見やすくしようと思って、以下のページを参考に設定しました。

- MavenでJUnitテストレポートを出力する  
https://qiita.com/unhurried/items/b10d4597d62dea1b3a94

pomに`<report>`タグを書くやり方の紹介もいくつかあったのですが、その方法では出来ませんでした・・・

上記ページの通りに`pom.xml`に追記して、上記ページ通りのコマンドを実行すると、下図のようなhtmlが作成されました。

|<img width="1284" alt="junit_report_html.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/ca839ab2-f315-7355-d656-fe4593ddd0f9.png">|
|:--|

Gradleの出してくれるレポートに慣れているので、ちょっと見づらいな・・・(汗)
Gradleなら特別な設定は不要でhtmlも吐いてくれるのにな。
Gradleなら・・・(大人の事情に涙)


現場からは以上です。