如何使用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一起使用。
答案 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,那么以下是正在发生的事情。
dev_second_feature
API启动JUnit平台,选择使用@RunWith(JUnitPlatform.class)
注释的测试类(我们称之为Launcher
)。@RunWith(JUnitPlatform.class)
检测到TestSuite
和Launcher
junit-jupiter
实施。junit-vintage
,因为它在技术上不是JUnit Jupiter测试类。TestEngine
,因为它使用TestSuite
注释。TestSuite
类。非直观的部分是JUnit Vintage引擎忽略@RunWith(JUnitPlatform.class)
,因为它实际上看起来像基于JUnit 4的测试类,因为它用TestSuite
注释。忽略它的原因是避免无限递归,这在DefensiveAllDefaultPossibilitiesBuilder的源代码中有解释:
TestSuite
上述代码在此类情况下返回@RunWith()
会导致空套件。
当然,如果用户被告知这种情况肯定会更好 - 例如,通过日志声明。因此,我为JUnit 5和IntelliJ打开了问题,以提高此类情景的可用性。
从好的方面来说,由于您使用的是IntelliJ IDEA 2016.2,因此您无需使用测试套件支持。相反,您只需在IDEA的项目视图中右键单击if ("org.junit.platform.runner.JUnitPlatform".equals(runnerClass.getName())) {
return null;
}
,然后选择null
即可运行所有测试。
此致
Sam (JUnit 5核心提交者)
答案 1 :(得分:0)
只需确保junit-vintage-engine工件位于测试运行时路径中。在这种情况下,JUnit 3和JUnit 4测试将由JUnit Platform启动程序自动获取