状況
既存のプロジェクトでSpringBoot
を2.0.9
から2.1.9
に上げた所、./mvnw surefire:test
を実行するとTestEngine with ID 'junit-jupiter' failed to discover tests
するようになってしまいました。
また、idea
からの実行では大半のテストが動くものの、Suppressed: org.junit.platform.commons.util.PreconditionViolationException: Configuration error: You must configure at least one set of arguments for this @ParameterizedTest
と出てパラメタライズテストが落ちるようになりました。
その対処としてやったことのまとめです。
試した内容
以下の順で試した所解決しました。
-
Maven
のアップデート -
JUnit5
の依存性をjunit-jupiter
のみ追加する形へ修正
1. Mavenのアップデート
こちらの記事で「Maven3.6.0
未満だとダメ」的な記述が有り、自分の環境のMaven
が3.5.4
だったため、3.6.2
へアップデートしました。
これを実行してもその場で症状は変わりませんでしたが、後で何かしら影響が有るかもしれないので、アップデートしておいた方がいいかなと思います。
2. JUnit5の依存性をjunit-jupiterのみ追加する形へ修正
こちらに「junit-jupiter-api
、junit-platform-launcher
、junit-jupiter-engine
の代わりにjunit-jupiter
のみをテストの依存関係として使用するとバグが消える」という記述があったため実際にやってみた所、発生していた問題は両方とも解消しました。
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
原因の考察
以下はpom.xml
変更後mvn dependency:tree
した結果です。
[INFO] +- org.junit.jupiter:junit-jupiter:jar:5.5.2:test
[INFO] | +- org.junit.jupiter:junit-jupiter-api:jar:5.3.2:test
[INFO] | | +- org.apiguardian:apiguardian-api:jar:1.0.0:test
[INFO] | | +- org.opentest4j:opentest4j:jar:1.1.1:test
[INFO] | | \- org.junit.platform:junit-platform-commons:jar:1.3.2:test
[INFO] | +- org.junit.jupiter:junit-jupiter-params:jar:5.3.2:test
[INFO] | \- org.junit.jupiter:junit-jupiter-engine:jar:5.3.2:test
[INFO] | \- org.junit.platform:junit-platform-engine:jar:1.3.2:test
これを見ると、junit-jupiter-api
、junit-platform-launcher
、junit-jupiter-engine
は5.3.2
が入っています。
ここから、原因はライブラリのバージョン間の互換性の問題だと思われます。