Java 如何使用path通过maven surefire插件包含集成测试

Java 如何使用path通过maven surefire插件包含集成测试,java,maven,testing,integration-testing,Java,Maven,Testing,Integration Testing,我的Java Maven项目在目录结构中将单元测试与集成测试分开: src/test/java下的单元测试 集成测试src/integrationtest/java src/integration test/java是一个非默认的测试源目录,因此我使用build helper maven plugin将其手动添加到项目中,如您所见: <plugin> <groupId>org.codehaus.mojo</groupId>

我的Java Maven项目在目录结构中将单元测试与集成测试分开:

  • src/test/java下的单元测试
    
  • 集成测试
    src/integrationtest/java
src/integration test/java
是一个非默认的测试源目录,因此我使用
build helper maven plugin
将其手动添加到项目中,如您所见:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>add-integration-test-sources</id>
                <phase>generate-test-sources</phase>
                <goals>
                    <goal>add-test-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>src/integration-test/java</source>
                    </sources>
                </configuration>
            </execution>
            ...
        </executions>
    </plugin>
这种方法是可行的,但我不得不在测试类中使用命名约定。确切地说,只有以“IntegrationTest”结尾的测试才会执行

我想根据路径中的命名约定而不是文件名来配置插件。确切地说,我打算允许
src/integration test/java
下的所有类,而不考虑文件名。到目前为止,我还没有成功,网络上的每一个教程都只展示了我在上面实现并向您展示的方法

有人对怎么做有什么建议吗

谢谢,两个插件(surefire和failsafe)都使用类路径。因此,为了实现您想要的,您要么使用命名约定(例如测试vs IT as standard),要么使用两个不同的模块

我能找到的唯一其他(真正丑陋的)解决方案是:

  • 将普通的单元测试也放在另一个目录中
  • 创建两个配置文件
    • 一个用于surefire,在build helper中具有相应的源目录
    • 第二个用于在生成帮助程序中使用相应的源目录进行故障保护
  • 在每个配置文件中,您通过其配置停用另一个测试插件
  • 默认情况下,使surefire配置文件处于活动状态
  • 在集成测试阶段,在当前pom上执行一个调用程序,停用surefire概要文件并激活另一个概要文件

这可能行得通,但维护和编码都很困难;)

对,因为它使用类路径,所以我改变了使用包名而不是路径的方法。实际上,将我的集成测试类移动到一个新的包中,如
basepackage.integration
。对我来说,这似乎是一个更干净的解决方案。首先,我建议只需遵循单元和集成测试的命名约定。单元测试
*Test.java
和集成测试
*IT.java
。如果遵循命名约定,则不需要有不同的目录,并且可以简化配置。Maven基于配置之上的约定。你当然可以自己做事情,但我不建议。。。
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M4</version>
        <configuration>
            <includes>
                <include>**/*IntegrationTest.java</include>
            </includes>
        </configuration>
        <executions>
            <execution>
                <id>integration-tests</id>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
                <configuration>
                    ...
                </configuration>
            </execution>
        </executions>
    </plugin>