如何让我的Maven构建运行从target\test-classes生成的单元测试?

jk9hmnmh  于 2022-11-22  发布在  Maven
关注(0)|答案(1)|浏览(209)

我使用代码生成器JAVA程序生成单元测试源代码到target\generated-test-sources中,我成功地将其编译到target\test-classes中,但它们被Maven构建忽略。我使用mvn clean test启动此构建。
在我的pom.xml文件中,我有一个主类com.mypackage.TestCaseGenerator的exec目标,我将它绑定到generate-test-sources阶段。

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>myexec</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>java</executable>
              <classpathScope>test</classpathScope>
              <arguments>
                <argument>-classpath</argument>
                <classpath/>
                <argument>com.mypackage.TestCaseGenerator</argument>
                <argument>target/generated-test-sources/somedir</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>add-test-source</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>target/generated-test-sources/somedir</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

当我在target/generated-test-sources/somedir上使用right-click -> run as JUnit Test从Eclipse运行测试用例时,测试正常执行。
我错过了一些专业配置?

68de4m5k

68de4m5k1#

如果您生成的测试的类/文件名与Maven Surefire插件的默认值不匹配,您将必须配置它以包含另一个模式的测试。
请参阅Inclusions and Exclusions of Tests的官方插件文档:
默认情况下,Surefire插件将自动包含具有以下通配符模式的所有测试类:

  • "**/Test*.java"-包括其所有子目录和所有以“Test”开头的Java文件名。
  • "**/*Test.java"-包括其所有子目录和所有以“Test”结尾的Java文件名。
  • "**/*Tests.java"-包括其所有子目录和所有以“Tests”结尾的Java文件名。
  • "**/*TestCase.java"-包括其所有子目录和所有以“TestCase”结尾的Java文件名。

你可以在插件配置的<includes><excludes>部分配置不同的模式。你可以在上面链接的文档页面找到很好的例子。

相关问题