在Maven中,是否可以将集成测试文件夹与单元测试文件夹分开?

35
Maven和集成测试页面上,它说:
  

未来 有传言称将来的 Maven 版本将支持类似于 src/it/java 的集成测试阶段,除了测试阶段的 src/test/java。

但这是在2011-12-11。这是否已经发生了?
此答案中回答了“在默认 src/test/java 文件夹之外运行 maven 测试”,它提到设置 <testSourceDirectory>,是否有一种方法只针对集成测试(即 integration-test 阶段)做到这一点?
我希望使用 Maven FailSafe 插件 并避免重命名大量的集成测试或使用仍处于试验阶段的 JUnit @Categories

这里有另一个回答,它是最新的 Maven:https://dev59.com/questions/Dabja4cB1Zd3GeqPaxbh - froderik
1个回答

38

您可以像这样将IT'ss放入不同的文件夹中:

.
|-- pom.xml
`-- src
    |-- it
    |   `-- java
    |       `-- com
    |           `-- soebes
    |               `-- maui
    |                   `-- it
    |                       `-- BitMaskIT.java
    |-- main
    |   `-- java
    |       `-- com
    |           `-- soebes
    |               `-- maui
    |                   `-- it
    |                       `-- BitMask.java
    `-- test
        `-- java
            `-- com
                `-- soebes
                    `-- maui
                        `-- it
                            `-- BitMaskTest.java

为了使这些文件夹被编译器等软件所识别,需要执行以下步骤。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.5</version>
  <executions>
    <execution>
      <id>add-test-source</id>
      <phase>process-resources</phase>
      <goals>
        <goal>add-test-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>src/it/java</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>

要真正运行IT,需要以下内容:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.15</version>
  <executions>
    <execution>
      <id>integration-test</id>
      <goals>
        <goal>integration-test</goal>
      </goals>
    </execution>
    <execution>
      <id>verify</id>
      <goals>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
</plugin>

这意味着您可以在同一模块中进行集成,缺点是运行集成测试使用与单元测试相同的资源。更好的解决方案是创建一个单独的Maven模块,在其中可以将集成测试放入通常的文件夹src/test/java等中,并仅配置maven-failsafe-plugin。


不错!只是为了明确起见,测试和它将被扫描以进行单元测试和集成测试,因此从根本上说仍然取决于文件名来区分两者,对吧? - Sled
对于第一个场景是正确的。但更好的方法是使用不同的模块,可以更改命名约定。我不建议那样做。 - khmarbaise
为什么failsafe插件在<phase>verify</phase>而不是<phase>integration-test</phase>期间运行?它在<phase>post-integration-test</phase>之后运行似乎有些奇怪? - Mike Samuel
看起来可以使用相同的 build-helper-maven-plugin 调用与 <goal>add-test-resource</goal> 一起使用,将 src/it/resources 添加到测试资源目录列表中。 - Mike Samuel
@khmarbaise 在你的第一个例子中,我理解将 BitMaskIT 放入名为 com.soebes.maui.it 的包中,但不是 BitMaskTestBitMask。 我会期望这些类在名为 com.soebes.maui 的类中,对吗? - mattalxndr
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接