誰でもこの問題を数分で簡単に再現できます。
quickstart
プロジェクトIntelliJ2018.3とMaven3.6.0では、Mavenアーキタイプを使用してまったく新しいプロジェクトを作成します maven-archetype-quickstart
バージョン1.4。
新しいプロジェクトのPOMファイルで、maven.compiler.source
とmaven.compiler.target
のプロパティを1.7から11に変更します。Java 11.0.2現在使用しています、- Zul from Azul Systems 。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
IntelliJのMavenパネルで、clean
およびinstall
ライフサイクルイベントを実行します。
install
の一部として、テストが実行されます。このquickstart
アーキタイプには、true
をアサートする単一のテストが付属しています。
結果はIntelliJのRun
パネルに表示されます。
[情報] work.basil.example.AppTestを実行しています
[情報]テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.026秒-work.basil.example.AppTest内
だから私はテストが実行されたことを知っています。
これはすべて良いです。それでは、JUnit 5にアップグレードして、問題を確認しましょう。
POMで、JUnitの依存関係を次のように変更します。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
…これに:
<dependencies>
<!--JUnit 5-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
コンパイラは私のAppTest.Java
ファイルについて文句を言います。そこで、そこでimport
ステートメントを変更して、jupiter
パッケージを使用します。新しいgreedfieldプロジェクトでJUnit5テストのみを実行したいので、ビンテージのJUnit4テストは必要ありません。したがって、インポートはこれから変更されます。
import static org.junit.Assert.assertTrue;
import org.junit.Test;
…これに:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
次に、Maven
> Lifecycle
> clean
&install
を実行します。
…そして、問題:私たちのテストは実行されません。 IntelliJのRun
パネルに表示されるレポート:
[情報] work.basil.example.AppTestを実行しています
[情報]テストの実行:0、失敗:0、エラー:0、スキップ:0、経過時間:0.003秒-work.basil.example.AppTest内
➥JUnit5が、JUnit4が正常に実行したのとまったく同じテストを実行できないのはなぜですか。
surefire
プラグインを更新しますMaven Surefireプラグイン を更新する必要があると思います。したがって、POMでこれを変更します。
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
…これに:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
別のclean
&install
。しかし、それ以上に、0個のテストを実行します。
[情報] work.basil.example.AppTestを実行しています
[情報]テストの実行:0、失敗:0、エラー:0、スキップ:0、経過時間:0.004秒-work.basil.example.AppTest内
これが私のPOMファイル全体です。
<?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>work.basil.example</groupId>
<artifactId>tester</artifactId>
<version>1.0-SNAPSHOT</version>
<name>tester</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!--JUnit 5-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.Apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.Apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.Apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Maven clean
&install
を実行すると、junit-jupiter-api
とjunit-platform-commons
の2つのJUnitライブラリが表示されます。
junit-jupiter-api
依存関係で次のバージョンを試しました。
試行するたびに、Maven clean
&install
を実行しました。良くない。それらの各バージョンはTests run: 0
を報告しました。
maven-archetype-quickstart
のせいにしないでください私は実際に、まったく異なるMavenアーキタイプを使用した非常に異なるプロジェクトでこの問題を発見しました。
このバグのあるJUnit5の動作を突き止めるために、非常に単純なmaven-archetype-quickstart
を使用して新しい新しいプロジェクトを試しました。私はまったく同じ動作を見つけました。すべてがコンパイルされ、テストハーネスが実行されますが、JUnit5ではテストが実行されません。
JUnit 5バージョン5.4.0-M1以降の場合、POMで新しい単一のMavenアーティファクト junit-jupiter
“ Aggregator”を指定します。
<!--JUnit 5-->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.0-M1</version>
</dependency>
以前のバージョンでは、少なくとも次の2つのアーティファクトを指定します: junit-jupiter-api
& junit-jupiter-engine
。
私が収集できることから、JUnit 5は、複数のテストフレームワークのヨークとして再設計されました。これらのテストシステムには、JUnit 4の「ビンテージ」テスト、新しいJUnit 5テスト(新しいアノテーションとメソッドを使用したテストの新しい構文)、および Specsy 、 Spek などが含まれます。 、 Cucumber 、Droolsシナリオ、 jqwik 、および 実装するものが多いTestEngine
インターフェイス。
どうやらjunit-jupiter-api
アーティファクトは外側のヨークだけです。また、実際にテストを実行するには、1つ以上の TestEngine
実装を指定する必要があります。たとえば、ビンテージのJUnit 4テストを実行するには、 VintageTestEngine
実装が必要です。また、JUNit 5テストを実行するには、 JupiterTestEngine
が必要です。 =実装。
したがって、JUnit 5テストを実行するには、MavenPOMでjunit-jupiter-engine
アーティファクトを使用してJupiterTestEngine
実装を指定する必要があります。
JUnit 5のマニュアル、特にセクション テストエンジンの設定 を参照してください。
Marc Philippによる このプレゼンテーション を参照してください。図は、(A)IDE /ビルドツールのコアと(B)テストを作成するプログラマー向けのプラグ可能なテスト作成フレームワークを備えたプラットフォームとしてのJUnit5を示しています。
junit-jupiter-engine
このサンプル に見られるように、 JUNit Jupiter Engine の2番目のJUnit関連の依存関係を追加します。 このアーティファクトのドキュメント は、「JUnit Jupiterテストエンジンの実装、実行時にのみ必要」と簡単に述べています。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
質問に示されているプロジェクトにその1つの依存関係を追加するだけで、テストが実行されます。
[情報] work.basil.example.AppTestを実行しています
[情報]テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.004秒-work.basil.example.AppTest内
junit-jupiter-params
同じサンプルは、 JUnit Jupiter Params の3番目のJUnit依存関係も示しています。サンプルのテストを実行する必要はありませんが、他の目的に役立つ場合があります。どうやら パラメータ化されたテスト に関連しています。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
これにより、合計3つのJUnit依存関係が作成されます。
<!--JUnit 5-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
同じPOMファイルが、これら3つのJUnit依存関係すべてに更新されました。
<?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>work.basil.example</groupId>
<artifactId>tester</artifactId>
<version>1.0-SNAPSHOT</version>
<name>tester</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!--JUnit 5-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.Apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.Apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.Apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
junit-jupiter
アーティファクトJUnit 5のバージョン5.4.0は、新しいMavenアーティファクト junit-jupiter
タイトルJUnit Jupiter(Aggregator)をもたらします。 「アグリゲーター*」という言葉は、プログラミングの便宜のために、Mavenで一般的に使用されるJUnit5アーティファクトのいくつかをバンドルすることを指しているようです。
この1つのdependency
をPOMに追加すると、プロジェクトに8つのライブラリが追加されます。
<!--JUnit 5-->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.0-M1</version>
</dependency>