简答
如果您使用的是IntelliJ IDEA 2016.2,则目前无法在IDE中执行使用@RunWith(JUnitPlatform.class)注释的测试类.
答案很长
根据你报告的行为,经过一些艰苦的调查工作,我相信我有你的问题的答案……
如果您使用的是内置支持JUnit 5的IntelliJ IDEA 2016.2,那么以下是正在发生的事情.
> IDEA通过Launcher API启动JUnit平台,选择使用@RunWith(JUnitPlatform.class)注释的测试类(让我们称之为TestSuite).
> Launcher检测到junit-jupiter和junit-vintage TestEngine实现.
> JUnit Jupiter引擎忽略了TestSuite,因为它在技术上不是JUnit Jupiter测试类.
> JUnit Vintage引擎也忽略了TestSuite,因为它是用@RunWith(JUnitPlatform.class)注释的.
>最终结果是,既没有注册的测试引擎声称它可以运行TestSuite类.
非直观的部分是JUnit Vintage引擎忽略了TestSuite,它实际上看起来像一个基于JUnit 4的测试类,因为它是用@RunWith()注释的.忽略它的原因是避免无限递归,这在DefensiveAllDefaultPossibilitiesBuilder的源代码中有解释:
if ("org.junit.platform.runner.JUnitPlatform".equals(runnerClass.getName())) {
return null;
}
上述代码在这种情况下返回null的事实导致空套件.
当然,如果用户被告知这种情况肯定会更好 – 例如,通过日志声明.因此,我已经为JUnit 5和IntelliJ提出了问题,以提高这种情况下的可用性.
从好的方面来说,由于您使用的是IntelliJ IDEA 2016.2,因此您无需使用测试套件支持.相反,您只需在IDEA的项目视图中右键单击src / test / java,然后选择Run’All Tests’,这将运行所有测试.
问候,
Sam(JUnit 5核心提交者)