如何使用 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 放在该标准目录中,但如果您真的想这样做,有多种选择:

  1. 如果你想要一个单独的测试源目录,即 TestJavaSrc,位于 Maven 项目的基本目录,那么你可以在你的 POM 中配置它:

    <build>
      <testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
    </build>
    
  2. 如果你想为那个单独的测试创建一个特殊的目录,也就是说你想保留默认的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 声明。