如何使用JUnit 5在IntelliJ 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运行套件,但它不适用于JUnit 5。
发布于 2016-08-24 16:43:30
短答案
如果您使用的是IntelliJ IDEA 2016.2,则目前无法在IDE中执行带有@RunWith(JUnitPlatform.class)注释的测试类。
长答案
根据你报告的行为,经过一番艰苦的调查工作,我相信我能回答你的问题.
如果您正在使用IntelliJ IDEA 2016.2,它已经内置了对JUnit 5的支持,那么下面是正在发生的事情。
Launcher平台,选择带有@RunWith(JUnitPlatform.class)注释的测试类(让我们称之为TestSuite)。Launcher同时检测junit-jupiter和junit-vintage TestEngine实现。TestSuite,因为它在技术上不是一个JUnit木星测试类。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核心委员会)
发布于 2017-02-23 21:09:53
除了萨姆·布兰宁的回答之外。在运行包中的所有测试类之前,我需要一个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或JUnit 5为这种情况找到另一个解决方案之前,这是一个解决办法。
发布于 2016-08-22 19:38:20
根据junit官方网站
只需确保junit-vintage引擎工件在测试运行时路径中。在这种情况下,JUnit 3和JUnit 4测试将由JUnit平台启动程序自动获取。
https://stackoverflow.com/questions/39085905
复制相似问题