当我尝试在junit5中运行测试用例时,得到以下执行:
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)
pom.xml
<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 test
首先,您正在将 ALPHA 快照工件(即org.junit:junit5-api:5.0.0-SNAPSHOT
)与 M2
工件(即org.junit.platform:junit-platform-surefire- provider:1.0.0-M2
)混合在一起,这将永远无法工作。
用户指南中的Maven部分建议您pom.xml
从junit5-maven-
consumer
项目中签出。如果遵循该示例,最终将得到类似以下内容的结果。
<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
。但是,这将不包含JupiterTestEngine
IDE的类路径中。
如果仅通过Maven或最新版本的IntelliJ 2016(具有对JUnit
5的内置支持)运行测试,那么您可能不在乎JupiterTestEngine
IDE中的类路径是否在此。但是…如果您使用的是Eclipse,NetBeans或IntelliJ的非beta版本,那么您肯定也希望将其JupiterTestEngine
放在IDE的类路径中。
问候,
Sam( 核心JUnit 5提交者 )
测试类: Maven目标:
问题内容: 在运行于Java 8的应用程序中,我正在使用将jar添加到引导类路径的方法。在Java 9中,该选项已删除。在Java 9中执行相同操作的替代方法是什么? 问题答案: 您可以使用。请参考发行说明,其中指出: 在此版本中,引导类路径已被大部分删除。Java 和选项已被删除。 仅当编译到JDK 8或更早版本时,才可以使用该选项。系统属性已被删除。 出于测试目的而依赖于覆盖平台类的部署将需要
问题内容: 我正在运行Ubuntu,并希望通过包含多个jar文件从终端执行Java文件。 我的所有罐子都放在tha jar文件夹中。 我试过了 我得到以下错误。 谁能指导如何在classpath中使用多个jar? 问题答案: 从类路径中删除空格并添加当前路径 从Java 6开始,您可以使用类路径通配符
我试图开发一个连接到Oracle数据库并执行函数的Java应用程序。如果我在Eclipse中运行应用程序,它可以工作,但是当我尝试在Windows命令提示符中运行. jar时,我会得到“遇到的错误:java.sql.SQLExc0019:找不到合适的驱动程序”。 我正在通过所有人的道路。在命令行中执行时,Eclipse中Maven依赖项中显示的jar文件。 步骤 > 从目标目录执行. jar,使用
我有一个批处理文件,它使用依赖于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
我正在使用maven构建工具。我的意图是将单独的绝对文件夹[例如:C:\test1.jar,C:\test2.jar]中可用的jar文件添加到类路径中。 我可以看到JAR被添加到war中可用的Manifest.mf文件的类路径中,但当war部署时,它由于“java.lang.ClassNotFoundException”[与test1.jar或test2.jar相关]而失败。 这是否意味着在man