9

IntelliJ IDEA v2016.2.2 で JUnit 5 を使用してすべてのスイート テストを実行するには?

このコードを実行している空のテスト スイートを取得します。

import org.junit.platform.runner.IncludeEngines;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.runner.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@IncludeEngines("junit-jupiter")
@SelectPackages("<eu...package>") //I confirm that <eu...package> is ok.
public class AllTests {
}

私は受け取ります:

INFORMAZIONI: Discovered TestEngines with IDs: [junit-jupiter, junit-vintage]
Empty test suite.
Empty test suite.

[root]
JUnit Jupiter
JUnit Vintage

また

import eu.....services.ServiceTest;
import eu.....repository.DAOTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
        ServiceTest.class,
        DAOTest.class
})
public class AllTests {
}

私は受け取ります:

INFORMAZIONI: Discovered TestEngines with IDs: [junit-jupiter, junit-vintage]
Empty test suite.

[root]
|+--JUnit Vintage
|   +--eu.....AllTests
|+--JUnit Jupiter

JUnit 4 ではスイートを実行できましたが、JUnit 5 では動作しません。

4

3 に答える 3

14

簡潔な答え

IntelliJ IDEA 2016.2 を使用している場合、現在@RunWith(JUnitPlatform.class)、IDE 内で で注釈が付けられたテスト クラスを実行することはできません。

長い答え

あなたが報告した行動に基づいて、いくつかの骨の折れる調査作業の後、私はあなたの質問に対する答えを持っていると信じています...

JUnit 5 のサポートが組み込まれている IntelliJ IDEA 2016.2 を使用している場合、次のようになります。

  1. IDEA は、LauncherAPI を介して JUnit プラットフォームを起動し、注釈が付けられたテスト クラスを選択します@RunWith(JUnitPlatform.class)(これを と呼びましょうTestSuite)。
  2. はとのLauncher両方の実装を検出します。junit-jupiterjunit-vintage TestEngine
  3. JUnit Jupiter エンジンはTestSuite、技術的には JUnit Jupiter テスト クラスではないため無視します。
  4. JUnit Vintage エンジンもTestSuiteで注釈が付けられているため無視し@RunWith(JUnitPlatform.class)ます。
  5. TestSuite最終的に、登録されたテスト エンジンはいずれも、クラスを実行できるとは主張しません。

直観的でない部分は、JUnit Vintage エンジンが を無視TestSuiteすることです。実際には、JUnit 4 ベースのテスト クラスのように見えますが、これは で注釈が付けられているため@RunWith()です。これが無視される理由は、無限再帰を避けるためです。これについては、 DefensiveAllDefaultPossibilitiesBuilderのソース コードで説明されています。

if ("org.junit.platform.runner.JUnitPlatform".equals(runnerClass.getName())) {
    return null;
}

上記のコードがそのnullようなシナリオで返されるという事実は、空の suiteという結果になります。

もちろん、ログ ステートメントなどを介して、ユーザーにそのようなシナリオが通知された方が確実に良いでしょう。そのため、このようなシナリオでの使いやすさを向上させるために、 JUnit 5IntelliJの両方の問題をオープンしました。

プラス面としては、IntelliJ IDEA 2016.2 を使用しているため、テスト スイート サポートを使用する必要はありません。src/test/java代わりに、 IDEA のプロジェクト ビューで を右クリックして を選択するだけRun 'All Tests'で、すべてのテストが実行されます。

よろしく、

Sam (JUnit 5 コア コミッター)

于 2016-08-24T16:43:30.337 に答える
0

junit公式ウェブサイトによると:

junit-vintage-engine アーティファクトがテスト ランタイム パスにあることを確認してください。その場合、JUnit 3 および JUnit 4 のテストは、JUnit プラットフォーム ランチャーによって自動的に選択されます。
于 2016-08-22T19:38:20.077 に答える