当前位置: 首页 > 知识库问答 >
问题:

在没有至少一个TestEngine的情况下无法创建启动器;考虑在JUnit5中向类路径添加一个引擎实现JAR

锺离卓
2023-03-14
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.<init>(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 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
<dependencies>
    ...
    <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit5-api</artifactId>
        <version>5.0.0-SNAPSHOT</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>        
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.0.0-M2</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

测试类:

public class PersonServiceTest {

    final Database database = Database.from("jdbc:h2:mem:" + App.DB_NAME);

    final PersonService personService = new PersonService(database);

    public PersonServiceTest() {
    }

    @Test
    @DisplayName("@Person#insert()")
    public void testInsert() {
        personService.insert(new PersonBuilder()
                .setId(1).setName("Bhuwan")
                .setAddress("KTM")
                .setContactNo("984849").createPerson()
        );
    }

}

Maven目标:MVN测试

共有1个答案

百里业
2023-03-14

将ALPHA快照工件(即org.junit:junit5-api:5.0.0-snapshot)与M2工件(即org.junit.platform:junit-platform-surefire-provider:1.0.0-M2)混合是行不通的。

用户指南中的Maven部分建议从junit5-maven-consumer项目中查看pom.xml。如果您遵循该示例,您将得到如下所示的结果。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <junit.jupiter.version>5.0.0-M2</junit.jupiter.version>
    <junit.platform.version>1.0.0-M2</junit.platform.version>
</properties>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>${junit.platform.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

要编写测试,您只需要junit-jupiter-api;但是,为了运行测试,必须在类路径上有TestEngine。因此,对于JUnit Jupiter,在类路径上也需要junit-jupiter-engine

正如Nicolai Parlog指出的,您可以添加junit-jupiter-engine作为maven-surefire-plugin的依赖项;但是,这将不包括IDE的类路径中的JupiterTestEngine

如果您只是通过Maven或使用IntelliJ2016的最新测试版(它内置了对JUnit5的支持)运行测试,那么您可能并不关心JupiterTestEngine是否位于IDE中的类路径上。但是...如果您使用的是Eclipse、NetBeans或IntelliJ的非测试版,那么您肯定也需要IDE中类路径上的JupiterTestEngine

问候,

 类似资料:
  • 问题内容: 当我尝试在junit5中运行测试用例时,得到以下执行: pom.xml 测试类别: Maven目标: 问题答案: 首先,您正在将 ALPHA 快照工件(即)与 M2 工件(即)混合在一起,这将永远无法工作。 用户指南中的Maven部分建议您从junit5-maven- consumer 项目中签出。如果遵循该示例,最终将得到类似以下内容的结果。 要 编写 测试,您只需要; 但是,为了

  • 我在用 Linux 编写的 CUDA 代码中使用了一个库(该库称为 cublas),我可以使用 nvcc 成功编译我的代码,但是当我运行代码时出现此错误: 加载共享库时出错:libcublas.so.7.5:无法打开共享对象文件:没有这样的文件或目录 我发现此链接是一种解决方案,建议运行一些命令以解决问题。基于此链接的一种解决方案是运行以下命令: export LD_LIBRARY_PATH=$L

  • 我有一个批处理文件,它使用依赖于tools.jar(来自JDK)的maven运行java类。 例如: mvn-f.\pom.xml-e exec:java-dfile.encoding=“utf-8”-dexec.mainclass=MyClass-dexec.args=“%1%2%3%4%5%6%7%8%9”-dexec.classpathscope=runtime 我的程序使用JDK中的too

  • 我试着去看其他的代码例子,但是它们和我的代码比较相似,但是我的应用程序仍然会因为同样的错误而崩溃。 这是我使用firebase文档的指导方针编写的代码: 上面的代码正在将otp发送到给定的号码,但是它崩溃了,并且cat-log显示了上面提到的错误。

  • 假设我有两个类叫做ad。 它们都实现了。 对于只有两种方法,分别称为和。 一切都很好。但是,虽然这似乎很好地利用了s,但我认为如果我需要向这个添加方法,实现就会中断,即我需要去实现这些类中的新方法,这打破了“封闭-开放原则”。 所以我想,除了,如果将来需要添加新方法,我还会使用类。 例如,。 这听起来是个好计划(如果不是,请纠正我)。 但问题是,如果这些类已经有其他类了怎么办?在这种情况下,我不能

  • 问题内容: 我在表格中有两列:和。我想以不允许插入两行的方式使对(,)唯一: 问题答案: 在这种情况下,您可以在表达式上创建索引: 注意:如果各列允许值,则有些奇怪。在那种情况下,无论位于哪个列中,相同的值都只能被允许一次。如果这实际上是一个问题,则可以使用更复杂的表达式来解决。