如何使用 surefire 插件 运行 在自定义文件夹结构中进行测试
How to use surefire plugin to run test in customized folder structure
我有一个自定义的 eclipse studio 项目。对于单元测试,我们在 -
下创建一个测试文件
TestJavaSrc/demoTest.java
现在这个 TestJavaSrc 文件夹与 POM.xml 处于同一级别
这是 POM.xml -
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo.test</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</build>
</project>
现在当我 运行 这个项目作为 mvn test 时,它找不到任何测试文件。
而且,当我 运行 在命令行上执行命令时 -
mvn "-Dtest=TestJavaSrc/DemoTest.java" test
它给我错误-
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test
(default-test) on project demo: No tests were executed!
(Set -DfailIfNoTests=false to ignore this error.) -> [Help 1]
此外,我的类路径中有 JUnit4
有什么我遗漏的吗?
假设您根本没有使用 src/test/java
进行测试,您可以指示构建使用不同的目录,例如:
<build>
...
<testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
...
</build>
在 Maven standard directory layout 中,用 Java 编写的单元测试应位于 src/test/java
:
下
The src
directory contains all of the source material for building the project, its site and so on. It contains a subdirectory for each type: main
for the main build artifact, test
for the unit test code and resources, site and so on.
因此,Surefire 插件将执行恰好位于该文件夹中的测试;这可以通过 testSourceDirectory
参数进行配置。请注意,此目录是包含所有测试的基本源目录。这意味着如果该基目录是 somedir
并且有一个名为 DemoTest.java
的 Java class,声明在包 foo.bar
中,则文件磁盘必须位于 somedir/foo/bar/DemoTest.java
.
这是您正在(误)使用的参数 test
输入的地方:它选择 Java class 仅按其名称执行;不是通过它的包声明,也不是通过文件在磁盘上的位置。
我建议您将测试 class 放在该标准目录中,但如果您真的想这样做,有多种选择:
如果你想要一个单独的测试源目录,即 TestJavaSrc
,位于 Maven 项目的基本目录,那么你可以在你的 POM 中配置它:
<build>
<testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
</build>
如果你想为那个单独的测试创建一个特殊的目录,也就是说你想保留默认的src/test/java
,但又想额外考虑这个新的源目录,那么您可以使用 Build Helper Maven 插件的 add-test-source
目标:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>add-test-source</id>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>TestJavaSrc</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
请注意,这两种方法都意味着直接位于该文件夹下的 demoTest.java
文件将位于默认包中,因此它不能有 package
声明。
我有一个自定义的 eclipse studio 项目。对于单元测试,我们在 -
下创建一个测试文件 TestJavaSrc/demoTest.java
现在这个 TestJavaSrc 文件夹与 POM.xml 处于同一级别 这是 POM.xml -
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo.test</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</build>
</project>
现在当我 运行 这个项目作为 mvn test 时,它找不到任何测试文件。 而且,当我 运行 在命令行上执行命令时 -
mvn "-Dtest=TestJavaSrc/DemoTest.java" test
它给我错误-
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test
(default-test) on project demo: No tests were executed!
(Set -DfailIfNoTests=false to ignore this error.) -> [Help 1]
此外,我的类路径中有 JUnit4
有什么我遗漏的吗?
假设您根本没有使用 src/test/java
进行测试,您可以指示构建使用不同的目录,例如:
<build>
...
<testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
...
</build>
在 Maven standard directory layout 中,用 Java 编写的单元测试应位于 src/test/java
:
The
src
directory contains all of the source material for building the project, its site and so on. It contains a subdirectory for each type:main
for the main build artifact,test
for the unit test code and resources, site and so on.
因此,Surefire 插件将执行恰好位于该文件夹中的测试;这可以通过 testSourceDirectory
参数进行配置。请注意,此目录是包含所有测试的基本源目录。这意味着如果该基目录是 somedir
并且有一个名为 DemoTest.java
的 Java class,声明在包 foo.bar
中,则文件磁盘必须位于 somedir/foo/bar/DemoTest.java
.
这是您正在(误)使用的参数 test
输入的地方:它选择 Java class 仅按其名称执行;不是通过它的包声明,也不是通过文件在磁盘上的位置。
我建议您将测试 class 放在该标准目录中,但如果您真的想这样做,有多种选择:
如果你想要一个单独的测试源目录,即
TestJavaSrc
,位于 Maven 项目的基本目录,那么你可以在你的 POM 中配置它:<build> <testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory> </build>
如果你想为那个单独的测试创建一个特殊的目录,也就是说你想保留默认的
src/test/java
,但又想额外考虑这个新的源目录,那么您可以使用 Build Helper Maven 插件的add-test-source
目标:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.12</version> <executions> <execution> <id>add-test-source</id> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>TestJavaSrc</source> </sources> </configuration> </execution> </executions> </plugin>
请注意,这两种方法都意味着直接位于该文件夹下的 demoTest.java
文件将位于默认包中,因此它不能有 package
声明。