IntelliJのJUnit5でAllSuiteテストを実行する方法IDEA v2016.2.2?
私はこのコードを実行して空のテストスイートを取得します:
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でスイートを実行できましたが、JUnit5では動作しません。
短い答え
IntelliJ IDEA 2016.2を使用している場合、現在、IDE内で@RunWith(JUnitPlatform.class)
アノテーションが付けられたテストクラスを実行することはできません。
長い答え
あなたが報告した行動に基づいて、いくつかの骨の折れる調査作業の後、私はあなたの質問に対する答えがあると信じています...
JUnit5のサポートが組み込まれているIntelliJ IDEA 2016.2)を使用している場合、次のようになります。
Launcher
APIを介してJUnitプラットフォームを起動し、@RunWith(JUnitPlatform.class)
で注釈が付けられたテストクラスを選択します(これをTestSuite
と呼びます)。Launcher
は、_junit-jupiter
_と_junit-vintage
_ TestEngine
の両方の実装を検出します。TestSuite
を無視します。@RunWith(JUnitPlatform.class)
で注釈が付けられているため、TestSuite
も無視します。TestSuite
クラスを実行できるとは主張していません。直感的でない部分は、JUnitVintageエンジンがTestSuite
を無視することですが、実際には@RunWith()
で注釈が付けられているため、JUnit4ベースのテストクラスのように見えます。無視される理由は、無限再帰を回避するためです。これは、 DefensiveAllDefaultPossibilitiesBuilder のソースコードで説明されています。
_if ("org.junit.platform.runner.JUnitPlatform".equals(runnerClass.getName())) {
return null;
}
_
上記のコードがそのようなシナリオでnull
を返すという事実は、空のスイートになります。
もちろん、ユーザーがそのようなシナリオについて知らされていれば、たとえばログステートメントを介して、確かに良いでしょう。したがって、このようなシナリオでの使いやすさを向上させるために、 JUnit 5 と IntelliJ の両方の問題を開きました。
プラス面として、IntelliJ IDEA 2016.2を使用しているため、テストスイートのサポートを使用する必要はありません。代わりに、で_src/test/Java
_を右クリックするだけです。 IDEAのプロジェクトビューで_Run 'All Tests'
_を選択すると、すべてのテストが実行されます。
よろしく、
サム(JUnit 5コアコミッター)
サムブランネンの答え に追加。パッケージ内のすべてのテストクラスを実行する前に、バックエンドをセットアップするためのTestSuitが必要でした。これはおそらくRun 'All Tests'
では不可能です。
しかし、私はそれに対する良い回避策を見つけたと思います。私はこれを思いついた:
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Nested;
import your.other.package.test.classes.*;
public class TestSuit {
@BeforeAll
public static void setup(){}
@Nested
public class TestExtender extends MyTestClass {}
}
各テストクラスを別のパッケージから拡張し、それに@Nested
アノテーションを追加することができます。これは最善の解決策ではありませんが、IDEAまたはJUnit5がこの場合の別の解決策を見つけるまでの回避策です。
junit公式ウェブサイト によると:
Junit-vintage-engineアーティファクトがテストランタイムパスにあることを確認してください。その場合、JUnit3およびJUnit4のテストはJUnitプラットフォームランチャーによって自動的に取得されます。