web-dev-qa-db-ja.com

IntelliJとGradleを使用したJunit5

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構文です。

22
LazerBanana

特定の依存関係を追加すると、問題が解決します。

注: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'
    }
}
25
LazerBanana

使用する構成は次のとおりです。

ビンテージエンジンの依存関係は、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>
8
sweetfa

JUnitのバージョンを5.4.0から5.3.2に変更する必要があり、それは魅力のように機能します。

4
André Machado

これをデバッグする一般的な方法は、実行することです

gradle test

コマンドラインで。これにより、IntelliJよりも詳細な出力が得られます。

0
serv-inc

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'
0
Alabi Temitope