我有一个定制的eclipse工作室项目。对于单元测试,我们在 -
下创建一个测试文件 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
我有什么遗失的吗?
答案 0 :(得分:2)
在Maven standard directory layout中,用Java编写的单元测试应位于src/test/java
下:
src
目录包含用于构建项目,其站点等的所有源材料。它包含每种类型的子目录:主要构建工件的main
,单元测试代码和资源的test
,站点等。
因此,Surefire插件将执行完全在该文件夹中的测试;这可以通过testSourceDirectory
参数进行配置。请注意,此目录是包含所有测试的基本源目录。这意味着如果该基本目录是somedir
并且有一个名为DemoTest.java
的Java类,声明在包foo.bar
中,那么磁盘上的文件必须位于{{1} }}
这是您(错误)使用的参数test
进入的地方:它选择仅按其名称执行的Java类;不是通过它的包声明,也不是通过磁盘上文件的位置。
我建议您将测试类放在该标准目录中,但如果您真的想这样做,则有多种选择:
如果您想拥有一个位于Maven项目基本目录的测试源目录somedir/foo/bar/DemoTest.java
,那么您可以在POM中配置它:
TestJavaSrc
如果你想要一个特殊的目录只是为了那个单独的测试,也就是说你要保留默认的<build>
<testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
</build>
,但是想要另外考虑这个新的源目录,那么你可以使用Build Helper Maven插件的add-test-source
目标:
src/test/java
请注意,这两种方法都意味着直接位于该文件夹下的<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
声明。
答案 1 :(得分:1)
假设您根本没有使用src/test/java
进行测试,可以指示构建使用不同的目录,例如:
<build>
...
<testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
...
</build>