IntelliJ 2017.2
を使用してプロジェクトをJava8 + Junit5に移行しようとしていますjunit-jupiter-api
バージョン5.0.0-M6
を追加しました
およびjunit-platform-launcher
バージョン1.0.0-M6
プロジェクト構造はデフォルトのMaven規則src/test/Java
です
これに関する記事をいくつか見つけましたが、どれも私の問題を解決しませんでした。
コンソールでうまく動作しますが、これはIntelliJのデフォルトのJUnit Runnerと関係があると思いますか、またはいくつかの依存関係がありませんか?
単一のテストクラスを実行すると、すべて正常に動作しますが、ディレクトリを選択し、Run all 'Tests' in Java
を使用していたようにすると、エラーはほとんど発生しません。
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;
注:テストはまだ移行していません。すべてJunit 4構文です。
特定の依存関係を追加すると、問題が解決します。
注:JUNITランチャーでバグがあったため、2017.2.0のINTELLIJを更新します
酸素Eclipseを使用している場合。
以下の依存関係により、DataProviderの代わりに使用できるJunit5パラメータ化テストが有効になります。
"org.junit.jupiter:junit-jupiter-params:5.0.0"
//for JUnit5 parametrized tests.
Junit5API。
"org.junit.jupiter:junit-jupiter-api:5.0.0"
//JUnit5 API
構文とインポートを変更せずにレガシーJUnit4テストを実行する場合に必要です。
"org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests
EDIT:07/2018ヴィンテージランナーのバージョンをジュピターバージョンに一致させます
新しい構文とインポートを使用してJUnit5テストを実行する場合に必要です。
"org.junit.jupiter:junit-jupiter-engine:5.0.0"
//for JUnit5 tests
Java.lang.NoSuchMethodError:org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;
ランチャー。
"org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher
スレッド「メイン」の例外Java.lang.NoSuchMethodError:org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;
追加情報 JUnit5 のインストール方法
Gradleのバージョン4.6以降、GradleがJunit5をネイティブにサポートするプラグインは不要になりました:そして、ビンテージランナーのバージョンは、 JUnit 5バージョン。
dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junitVersion"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
}
test {
useJUnitPlatform {
includeEngines 'junit-jupiter', 'junit-vintage'
}
}
使用する構成は次のとおりです。
ビンテージエンジンの依存関係は、junit4テストも使用している場合にのみ必要です。
Jupiter paramsは、パラメーター化されたテストを使用する場合にのみ必要です。
<properties>
<junit.version>5.0.0</junit.version>
</properties>
...
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>4.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
JUnitのバージョンを5.4.0から5.3.2に変更する必要があり、それは魅力のように機能します。
これをデバッグする一般的な方法は、実行することです
gradle test
コマンドラインで。これにより、IntelliJよりも詳細な出力が得られます。
Androidスタジオの場合
Org.junit.jupiter:junit-jupiter-apiを解決できません
ファイルに移動します..\AndroidStudioProjects\Pets\app\build.gradle
依存関係セクション
これらの2行のコードを入力します
testImplementation 'junit:junit:4.12'
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'