JUnit 5 - 使用JUnit Jupiter引擎时IntelliJ IDEA中的空测试套件

时间:2016-08-22 18:00:05

标签: java spring intellij-idea spring-test junit5

如何使用IntelliJ IDEA v2016.2.2中的JUnit 5执行All Suite测试?

我得空测试套件运行此代码:

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一起使用。

2 个答案:

答案 0 :(得分:11)

简答

如果您使用的是IntelliJ IDEA 2016.2,则目前无法在IDE中执行使用git checkout dev git merge dev_3_feature git merge dev_second_feature git push -u origin dev 注释的测试类。

长答案

根据您报告的行为,经过一些艰苦的调查工作后,我相信我对您的问题有了答案......

如果您使用的是内置支持JUnit 5的IntelliJ IDEA 2016.2,那么以下是正在发生的事情。

  1. IDEA通过dev_second_feature API启动JUnit平台,选择使用@RunWith(JUnitPlatform.class)注释的测试类(我们称之为Launcher)。
  2. @RunWith(JUnitPlatform.class)检测到TestSuiteLauncher junit-jupiter实施。
  3. JUnit Jupiter引擎忽略junit-vintage,因为它在技术上不是JUnit Jupiter测试类。
  4. JUnit Vintage引擎也会忽略TestEngine,因为它使用TestSuite注释。
  5. 最终结果是,已注册的测试引擎都没有声称它可以运行TestSuite类。
  6. 非直观的部分是JUnit Vintage引擎忽略@RunWith(JUnitPlatform.class),因为它实际上看起来像基于JUnit 4的测试类,因为它用TestSuite注释。忽略它的原因是避免无限递归,这在DefensiveAllDefaultPossibilitiesBuilder的源代码中有解释:

    TestSuite

    上述代码在此类情况下返回@RunWith()会导致空套件

    当然,如果用户被告知这种情况肯定会更好 - 例如,通过日志声明。因此,我为JUnit 5IntelliJ打开了问题,以提高此类情景的可用性。

    从好的方面来说,由于您使用的是IntelliJ IDEA 2016.2,因此您无需使用测试套件支持。相反,您只需在IDEA的项目视图中右键单击if ("org.junit.platform.runner.JUnitPlatform".equals(runnerClass.getName())) { return null; } ,然后选择null即可运行所有测试。

    此致

    Sam (JUnit 5核心提交者)

答案 1 :(得分:0)

根据junit oficial website

只需确保junit-vintage-engine工件位于测试运行时路径中。在这种情况下,JUnit 3和JUnit 4测试将由JUnit Platform启动程序自动获取