COMPILATION ERROR : package my.package.root.util does not exist
COMPILATION ERROR : package my.package.root.util does not exist
我有一个 Eclipse Java 项目,我正在尝试使用 Maven 对其执行单元测试。
我的单元测试如下所示,因此它符合预期的层次结构
src/test/java/StringUtilsTests.java
但是,我的单元测试引用了源代码位于:
src/my/package/root/util/StringUtils.java
只是因为它一直都是这样,我不想为测试更改我的文件夹层次结构。
因此,我使用build-helper-maven-plugin来添加这个源码文件夹,如下
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/my/package/root/util</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
但即便如此,我还是收到以下错误:
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/frederic/git/myproject/src/test/java/StringUtilsTests.java:[22,32] package package my.package.root.util does not exist
下面是我对 maven-surefire-plugin 的引用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
如果我不进行测试,情况会更糟
src/test/java/StringUtilsTests.java
但这里例如:
src/tests/my/package/root/util/StringUtilsTests.java
maven-surefire-plugin 会显示
No tests to run
您需要 运行 它们作为单元测试还是可以 运行 它们作为集成测试?我认为集成测试会像这样开箱即用?只需将这些测试的 class 名称更改为以 IT MyClassIT.java
结尾,或者微调您的 .pom 并将目标更改为集成测试阶段或验证阶段?我认为这应该可行,因为它将在构建周期的稍后部分执行。
否则尝试用通配符更改此行:
<source>src/my/package/root/util/*</source>
基于 this article,将以下元素添加到我的 pom.xml
中解决了我的问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<executions>
<execution>
<id>compiletests</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<testSourceDirectory>${project.basedir}/src-test</testSourceDirectory>
非常重要的是添加这个依赖项
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
我有一个 Eclipse Java 项目,我正在尝试使用 Maven 对其执行单元测试。
我的单元测试如下所示,因此它符合预期的层次结构
src/test/java/StringUtilsTests.java
但是,我的单元测试引用了源代码位于:
src/my/package/root/util/StringUtils.java
只是因为它一直都是这样,我不想为测试更改我的文件夹层次结构。
因此,我使用build-helper-maven-plugin来添加这个源码文件夹,如下
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/my/package/root/util</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
但即便如此,我还是收到以下错误:
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/frederic/git/myproject/src/test/java/StringUtilsTests.java:[22,32] package package my.package.root.util does not exist
下面是我对 maven-surefire-plugin 的引用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
如果我不进行测试,情况会更糟
src/test/java/StringUtilsTests.java
但这里例如:
src/tests/my/package/root/util/StringUtilsTests.java
maven-surefire-plugin 会显示
No tests to run
您需要 运行 它们作为单元测试还是可以 运行 它们作为集成测试?我认为集成测试会像这样开箱即用?只需将这些测试的 class 名称更改为以 IT MyClassIT.java
结尾,或者微调您的 .pom 并将目标更改为集成测试阶段或验证阶段?我认为这应该可行,因为它将在构建周期的稍后部分执行。
否则尝试用通配符更改此行:
<source>src/my/package/root/util/*</source>
基于 this article,将以下元素添加到我的 pom.xml
中解决了我的问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<executions>
<execution>
<id>compiletests</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<testSourceDirectory>${project.basedir}/src-test</testSourceDirectory>
非常重要的是添加这个依赖项
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>