JUnit 5で簡単なテストメソッドを作成しました。
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
しかし、mvn test
を実行すると、次のようになりました:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
どういうわけか、surefireはそのテストクラスを認識しませんでした。私のpom.xml
は次のようになります。
<properties>
<Java.version>1.8</Java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${Java.version}</source>
<target>${Java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
これを機能させる方法はありますか?
今日のmaven-surefire-plugin
は JUnit 5を完全にサポートしていない です。 SUREFIRE-1206 にこのサポートを追加することに関して未解決の問題があります。
そのため、 カスタムプロバイダー を使用する必要があります。 1つはすでにJUnitチームによって開発されています。 ユーザーガイド から、junit-platform-surefire-provider
プロバイダーと新しいAPIのTestEngine
実装を追加する必要があります。
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<!-- latest version (2.20.1) does not work well with JUnit5 -->
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.0.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
また、test
のスコープでjunit-jupiter-api
依存関係を必ず宣言してください。
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
問題 はMaven Surefireプラグインv2.22.0で修正されました
新しいバージョン はMaven Central Repositoryで利用可能です。
Maven
<dependency>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</dependency>
Gradle
compile group: 'org.Apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.0'
Marian が指摘したように、JUnit 5 Platform Surefire Provider(1.2.0)の最新バージョンはMaven Surefireプラグイン(2.21.0):
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</plugin>
例
pom.xml
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
TestScenario.Java
package test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class TestScenario {
@Test
@DisplayName("Test 2 + 2 = 4")
public void test() {
Assertions.assertEquals(4, 2 + 2);
}
}
出力(mvn clean install)
...
[INFO] ---maven-surefire-plugin:2.21.0:test(default-test)@ test --- [情報]
[INFO] ------------------------------------------ -------------
[INFO] T E S T S
[INFO] ------------------------------------------ -------------
[INFO] test.TestScenarioの実行
[INFO]テスト実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.005秒-test.TestScenarioで
[情報]
[INFO]結果:
[情報]
[INFO]テストの実行:1、失敗:0、エラー:0、スキップ:0
...
今日までの最も簡単な方法:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
</plugin>
JUnit 5ドキュメント から:
バージョン
2.22.0
から、Maven SurefireはJUnitプラットフォームでテストを実行するためのネイティブサポートを提供します。
さらに、 maven-surefire-plugin
documentation で読むことができます:
JUnit 5プラットフォームの使用
JUnitプラットフォームの使用を開始するには、少なくとも1つの
TestEngine
実装をプロジェクトに追加する必要があります。たとえば、Jupiterでテストを作成する場合は、テストアーティファクトjunit-jupiter-engine
をPOMの依存関係に追加します
したがって、JUnit 5テストを実行するにはこれで十分です。
<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>davidxxx</groupId>
<artifactId>minimal-pom-junit5</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<junit-jupiter.version>5.2.0</junit-jupiter.version>
<!--optional below but good practice to specify our Java version-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<!--optional below -->
<!-- add any JUnit extension you need such as -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>
</project>
私のGitHubスペースに、参照/クローンできる作業用のサンプルMavenプロジェクトを追加しました。
URL: https://github.com/ebundy/junit5-minimal-maven-project
JUnit5とMavenでこの問題に遭遇しましたが、onlyjunit-jupiter-engineが依存関係として追加された場合でも、テストは一部のプロジェクトで実行され、他のプロジェクトでは実行されません。そして、ここのコメントにも同じパターンがあります。上の@Alexのコメントでは、以前のバージョンのsurefire/junit/platformであっても、彼が問題を抱えていないことがわかります。
しばらく頭を悩ませた後、テストが実行されないプロジェクトは、テストmethodがditnotには「test」という単語が含まれます。これは http://maven.Apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html によって義務付けられていませんが
言い換えると:とだけ
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
この
@Test
public void something() {
assertTrue(true);
}
実行されませんが、
@Test
public void testSomething() {
assertTrue(true);
}
実行されます!
この問題はロシアの人形として展開します...
とにかく、更新された回答がすべての問題を一度に修正する@Mikhail Kholodkovの+1です!
補足として、surefire 2.22.0 + junit 5.2.0 + platform 1.2.0も動作します。添付されているのは、あなたの審判のための作業用のポンポンです:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jjhome.junit5</groupId>
<artifactId>junit5-hone</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>junit5-home</name>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit5.version>5.2.0</junit5.version>
<platform.version>1.2.0</platform.version>
<surefire.version>2.22.0</surefire.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>${platform.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
私の場合、これはクラスパスのTestNGによるものでした( SUREFIRE-1527 )。 Groovy 2.5.5 POMには、groovy-testng
モジュールが付属しています。
手動で指定されたテストフレームワークプロバイダー( https://maven.Apache.org/surefire/maven-surefire-plugin/examples/providers.html で説明されているように)は問題を解決しました:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit-platform</artifactId>
<version>2.22.1</version>
</dependency>
Surefireがゼロテストを認識する原因となる同様の問題がありました。
私の問題は、以下に関連していることが判明しました( JUnit 5.1.0/maven ドキュメントから):
Surefire 2.20のメモリリークとJava 9での実行の問題のため、junit-platform-surefire-providerは現在Surefire 2.19.1でのみ動作します。
Surefire(2.21.0)およびjunit-platform-surefire-provider(1.1.0)の最新バージョンを使用しようとしていましたが、動作しませんでした(Java 8または9でも動作しませんでした)
Surefire 2.19.1に戻すと、問題が解決しました。
この問題 によると、修正はjunit-platform-surefire-providerのバージョン1.2.0に含まれます(現在はSNAPSHOTとしてのみ入手可能)。
Surefire 2.19 + junit-platform- * 1.0.3で動作します
2019年8月に同じ問題に遭遇したので、ここで質問しました Mavenは実行するJUnitテストを静かに見つけられませんでした 。これらの答えは私を正しい方向に導きましたが、問題をより簡潔に解決できることがわかりました。 JUnit5サンプルMavenプロジェクト からソリューションをコピーしました。
JUnit 5.5.1およびmaven-surefire-plugin
2.22.2の時点では、junit-platform-surefire-provider
依存関係を追加する必要はありません。 pom.xml
でこの1つの依存関係と1つのプラグインを指定するだけで十分です。
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
私が気づいたことの1つは、私がそれを機能させることができたことです:
ClinicCalendarShould
という名前を付けると、mavenで取得されませんClinicCalendarTest
という名前を付けると、mavenによって取得されますそのため、何らかの構成やパラメーター、またはsurefireプラグインに含まれる何かが欠落していない限り、デフォルトでテストクラスにXXXTestという名前を付ける必要があります。
maven-surefire-plugin:2.20
に更新すると、Junit5テストが問題なく実行されます。
しかし、私はJunit5でM6
バージョンを使用しています。