Tag: junit5

JUnit5 Platform Launcher API – 如果没有至少一个TestEngine,则无法创建Launcher

我正在尝试升级我们的自动化测试套件的测试能力以接受JUnit5测试,并且当遵循JUnit Platform Launcher API指令时,我得到错误“无法创建没有至少一个TestEngine的启动器;考虑将引擎实现JAR添加到类路径” 。 原因是以下内容无法找到TestEngine任何实例: Iterable testEngines = ServiceLoader.load(TestEngine.class,ClassLoaderUtils.getDefaultClassLoader()); 您对如何确保ServiceLoader能够找到TestEngine实例有任何建议吗? 我已经包含org.junit.jupiter.engine ,它包含实现TestEngine ,作为必需的插件。 我试过在项目的.classpath中添加一个直接路径到jupiter.engine jar。 我已经尝试在同一个文件中创建JupiterTestEngine witihn的实例并且它已成功创建,但仍未找到服务加载程序发现的TestEngine 。 编辑(回应Sormuras的评论): 这是针对Eclipse的,你可以在这里看到代码库: http : //git.eclipse.org/c/platform/eclipse.platform.releng.git/tree/bundles/org.eclipse.test 我在mainifest中添加了以下内容: org.junit.platform.launcher, org.junit.jupiter.api;bundle-version=”5.0.0″, org.junit.platform.engine;bundle-version=”1.0.0″, org.junit.platform.commons;bundle-version=”1.0.0″, org.junit.jupiter.engine;bundle-version=”5.0.0″, org.junit.vintage.engine;bundle-version=”4.12.0″ 将此添加到.classplath: 将org.junit.jupiter.engine jar添加到lib文件夹,然后添加它以包含在二进制构建中。 (我正在寻找解决方案) 我正在尝试将Tutorial代码用于http://git.eclipse.org/c/platform/eclipse.platform.releng.git/tree/bundles/org.eclipse.test/src的编辑版本。 /org/eclipse/test/EclipseTestRunner.java删除了所有旧的junit代码。

为什么JUnit 5测试不从抽象类inheritance@Test注释?

我刚刚意识到(在将遗留代码从JUnit 4迁移到JUnit 5时)我们的一些测试方法没有执行,因为它们没有@Test注释。 他们没有它,因为它们覆盖了抽象超类(注释存在的地方)的方法。 我可以通过在每个方法中添加@Test来轻松解决这个问题。 但我想知道这是否是预期的行为。 它从JUnit 4更改为5但我在官方JUnit5用户指南或其他任何地方都找不到任何相关内容。 根据这个问题 ,注释通常不会被inheritance。 但似乎在新的JUnit版本中故意改变了这一点。 (或者我错过了什么?) 抽象测试类 import org.junit.jupiter.api.Test; abstract class AbstractJUnit5Test { @Test void generalTest() { System.out.println(“This is a test in the abstract class”); } @Test abstract void concreteTest(); } 具体的测试课 import org.junit.jupiter.api.Test; class ConcreteJUnt5Test extends AbstractJUnit5Test { // only gets executed with an additional @Test annotation: @Override […]

使用Junit 5运行测试时的java.lang.NoSuchMethodError

我创建了一个简单的测试来尝试Junit 5: import org.junit.jupiter.api.Test; public class MyTest { @Test public void testJupiter() { System.out.println(“test”); } } 这是我使用的依赖: org.junit.jupiter junit-jupiter-api 5.0.0 test 堆栈跟踪是下一个: Exception in thread “main” java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader; at org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry.loadTestEngines(ServiceLoaderTestEngineRegistry.java:30) at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.createListeners(JUnit5IdeaTestRunner.java:39) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:49) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 出了什么问题?

如何在JUnit 5中使用String数组进行参数化

我想编写JUnit 5参数化测试,它将字符串数组( String[] )作为参数: @ParameterizedTest @MethodSource(“stringArrayProvider”) void parseFirstAndSecondInt(String[] args) { Arguments arguments = new Arguments(args); assertEquals(1, arguments.getFirst()); assertEquals(2, arguments.getSecond()); } 我不确定,如何提供字符串数组的集合/流/迭代器。 我没有成功尝试使用@MethodSource注释的方法 static Stream stringArrayProvider() { return Stream.of( new String[]{“1”, “2”}, new String[]{“1”, “2”, “3”}); } 但是我收到了这个例外: org.junit.jupiter.params.converter.ArgumentConversionException: No implicit conversion to convert object of type java.lang.String to type [Ljava.lang.String; 有这种参数化测试的好设计/解决方案是什么?

JUnit 5 @Nested注释的目的是什么?

在JUnit 5中,有一个新的注释: @Nested 。 我理解它是如何工作的,我理解为什么我们使用嵌套类,我只是不明白为什么我们需要在测试中使用嵌套测试类。

JUnit 5不执行使用BeforeEach注释的方法

JUnit 5不会在使用@BeforeEach注释注释的测试类中调用我的方法,其中我初始化测试中所需的测试对象的一些字段。 当试图在测试方法(使用@Test注释的方法)中访问这些字段时,我显然得到一个NullpointerException。 所以我在方法中添加了一些输出消息。 import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TestClass { private String s; public TestClass() { } @BeforeEach public void init() { System.out.println(“before”); s = “not null”; } @Test public void test0() { System.out.println(“testing”); assertEquals(“not null”, s.toString()); } } 在运行mvn clean test时测试的输出中,我从使用@Test注释注释的test0()方法获得“testing”消息,但不打印“before”消息。 Running de.dk.spielwiese.TestClass !!!testing!!! Tests run: 1, Failures: 1, […]

如何使用Maven Failsafe插件运行JUnit 5集成测试?

当我运行命令mvn clean failsafe:integration-test ,Mail Failsafe插件将找不到我的JUnit 5集成测试,尽管它可以找到文件。 我有junit-jupiter-api和junit-jupiter-engine作为测试依赖项: 5.0.1 org.junit.jupiter junit-jupiter-api ${junit.jupiter.version} test org.junit.jupiter junit-jupiter-engine ${junit.jupiter.version} test 我的集成测试正确命名(遵循**/*IT.java , **/IT*.java或默认包含在Failsafe中的**/*ITCase.java ,默认情况下由Surefire排除)。 有什么方法可以使用Failsafe进行JUnit 5测试吗?

JUnit 5中的ExternalResource和TemporaryFolder的等价物是什么?

根据JUnit 5用户指南 ,JUnit Jupiter为某些JUnit 4规则提供向后兼容性,以帮助迁移。 如上所述,JUnit Jupiter本身不支持也不支持JUnit 4规则。 然而,JUnit团队意识到许多组织,特别是大型组织,可能拥有大型JUnit 4代码库,包括自定义规则。 为了服务这些组织并实现渐进式迁移路径,JUnit团队决定在JUnit Jupiter中逐字支持一系列JUnit 4规则。 该指南继续说其中一个规则是ExternalResource ,它是TemporaryFolder的父级。 但是,遗憾的是,该指南没有继续说明迁移路径是什么,或者对于那些编写新JUnit 5测试的人来说等价。 那么我们应该使用什么?

没有至少一个TestEngine就无法创建Launcher; 考虑在Junit 5中将引擎实现JAR添加到类路径中

当我试图在junit5中运行测试用例时,我得到了以下execption: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project CRUD-App: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test failed: There was an error in the forked process org.junit.platform.commons.util.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath at org.junit.platform.commons.util.Preconditions.condition(Preconditions.java:161) at org.junit.platform.launcher.core.DefaultLauncher.(DefaultLauncher.java:52) at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:42) at org.junit.platform.surefire.provider.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:59) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240) at […]

JUnit 5测试用例未执行

我在NetBeans 8.2中的一个新的干净Maven项目中创建了这个测试: import static org.junit.jupiter.api.Assertions.fail; import org.junit.jupiter.api.Test; public class JUnit501Test { @Test void firstTest() { fail(“epicly”); } } 如果我运行测试,则会显示日志 ——————————————————- TESTS ——————————————————- Running JUnit501Test Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 我的pom.xml包含这个依赖项: org.junit.jupiter junit-jupiter-api 5.0.1 test 什么可能导致JUnit 5忽略测试方法? […]