【发布时间】:2022-02-11 18:04:08
【问题描述】:
我在 2 个项目中运行 Junit 5 测试。在一个项目中,相同的设置工作正常,测试运行没有问题。
在另一个项目中,我一直低于编译错误。依赖项添加到 PoM 文件中,当从 eclipse 运行时,测试运行没有错误。只是 mvn clean install 失败。我查看了类似错误的各种帖子,但它并没有解决我的问题。任何线索都会非常有帮助。其他项目中的相同 pom 文件可以正常工作。
错误: 无法在项目 junit5-sampletests 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile):编译失败:编译失败: [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass2.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestBaseClass.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestBaseClass.java:[4,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass1.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass3.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass2.java:[7,10] 找不到符号
我的 pom 文件的内容:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>junit5-sampletests</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<additionalClasspathElements>
<additionalClasspathElement>src/test/java/</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<outputDirectory>${basedir}/target/site/surefire-report.html</outputDirectory>
</configuration>
</plugin>
</plugins>
</reporting>
<repositories>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/maven-repository</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-api</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
Eclipse 中的结构:
到目前为止,测试非常简单,因为我正在尝试创建和原型化 junit5 framwrok。测试文件之一是:
package demoTest;
导入 org.junit.jupiter.api.Test;
/**
- @author ayesha
*/ 公共类 TestDemoClass3 扩展 TestBaseClass {
@Test
public void test5() throws Exception {
System.out.println("Test 1 from DemoClass 3 " +Thread.currentThread().getName());
}
@Test
public void test6() throws Exception {
System.out.println("Test 2 from DemoClass 3 " + Thread.currentThread().getName());
}
}
【问题讨论】:
-
首先遵循约定不要重新定义 sourceDirectory 除非你 100% 知道你在做什么......(usr 默认目录布局
src/main/java/<package>生产代码..src/test/java/<packageName>单元测试`等)此外,为什么要定义maven-jar-plugin的test-jar目标... 为什么要使用maven-dependency-plugin 来复制???进入lib目录?除此之外,您的错误是:package org.junit.jupiter.api does not exist... 定义了至少版本为 2.22.2 以支持 JUnit Jupiter 5.X 的surefire/failsafe 插件,还删除了显式的surefire-provider .... -
还要从 maven-surefire-plugin 中删除整个配置,因为如果您遵循除此之外不需要的约定是错误的...毕竟决定使用 JUnit Jupiter 或 JUnit 4...还请显示您的一项测试,特别是无法编译的测试等...
-
@khmarbaise:我根据您的指导编辑了 pom。将依赖项复制到 lib 中,因为在将 junit 平台的所有必需依赖项存储在 lib 中之后,我将签署命令行以触发 JUNIT 5 测试。不过,这在其他设置中效果很好。还添加了示例代码。更换pom后错误依旧没有消失
-
Copyign dependency into lib as I will be sign command line to trigger JUNIT 5 tests ...?你能更详细地解释一下吗?简单示例:github.com/khmarbaise/example-junitjupiter(TestBaseClass.java 中的问题)。在单元测试中使用继承通常是个坏主意... -
@khmarbaise 计划是使用 java 命令和平台运行程序从命令行执行 Junit5 测试。此命令所需的 jar 位于 lib 目录中。我可以跳过这一步,将 jar 一次复制到 lib 目录。但 porblem 似乎在其他地方。我可以使用完全相同的 pom 运行脚本并为 otehr 项目设置。我认为这与项目设置或其他东西有关。但无法确定原因。在我看来更像是一个 Maven 问题
标签: maven junit-jupiter