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

Dis*_*sha 4 java testing junit maven maven-surefire-plugin

我有一个定制的 eclipse studio 项目。对于单元测试,我们正在 - 下创建一个测试文件

  TestJavaSrc/demoTest.java
Run Code Online (Sandbox Code Playgroud)

现在,这个 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>
Run Code Online (Sandbox Code Playgroud)

现在,当我以 mvn test 运行该项目时,它无法找到任何测试文件。而且,当我在命令行上运行以下命令时 -

 mvn "-Dtest=TestJavaSrc/DemoTest.java" test
Run Code Online (Sandbox Code Playgroud)

它给了我错误-

 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]
Run Code Online (Sandbox Code Playgroud)

另外,我的类路径中有 JUnit4

我有什么遗漏的吗?

Tun*_*aki 6

在 Maven标准目录布局中,用 Java 编写的单元测试应位于src/test/java

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

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

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

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

  1. 如果您想要有一个测试源目录(位于TestJavaSrcMaven 项目的基本目录中),那么您可以在 POM 中使用以下命令进行配置:

    <build>
      <testSourceDirectory>${project.basedir}/TestJavaSrc</testSourceDirectory>
    </build>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您想为该单独的测试创建一个特殊目录,也就是说您想保留默认目录src/test/java,但想另外考虑这个新的源目录,那么您可以使用add-test-sourceBuild Helper Maven 插件的目标:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)

请注意,这两种方法都意味着demoTest.java直接位于该文件夹下的文件将位于默认包中,因此它不能有声明package