如何使用surefire插件在自定义文件夹结构中运行测试

时间:2016-11-15 13:11:04

标签: java maven testing junit maven-surefire-plugin

我有一个定制的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

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:2)

在Maven standard directory layout中,用Java编写的单元测试应位于src/test/java下:

  

src目录包含用于构建项目,其站点等的所有源材料。它包含每种类型的子目录:主要构建工件的main,单元测试代码和资源的test,站点等。

因此,Surefire插件将执行完全在该文件夹中的测试;这可以通过testSourceDirectory参数进行配置。请注意,此目录是包含所有测试的基本源目录。这意味着如果该基本目录是somedir并且有一个名为DemoTest.java的Java类,声明在包foo.bar中,那么磁盘上的文件必须位于{{1} }}

这是您(错误)使用的参数test进入的地方:它选择仅按其名称执行的Java类;不是通过它的包声明,也不是通过磁盘上文件的位置。

我建议您将测试类放在该标准目录中,但如果您真的想这样做,则有多种选择:

  1. 如果您想拥有一个位于Maven项目基本目录的测试源目录somedir/foo/bar/DemoTest.java,那么您可以在POM中配置它:

    TestJavaSrc
  2. 如果你想要一个特殊的目录只是为了那个单独的测试,也就是说你要保留默认的<build> <testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory> </build> ,但是想要另外考虑这个新的源目录,那么你可以使用Build Helper Maven插件的add-test-source目标:

    src/test/java
  3. 请注意,这两种方法都意味着直接位于该文件夹下的<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>