Eclipse JAVA 分离单元测试和集成测试

Posted

技术标签:

【中文标题】Eclipse JAVA 分离单元测试和集成测试【英文标题】:Eclipse JAVA separate unit test and integration test 【发布时间】:2014-05-13 15:12:11 【问题描述】:

我正在升级一个只包含用 JAVA 编写的集成测试的项目。

现在我们要编写单元测试,所以我决定创建 src/it/java 文件夹来放置所有现有的测试,并在 src/test/java 中编写新的单元测试

我已经使用 surfire 和 build-helper 来做到这一点。

在命令行中我可以运行

mvn clean install 并且只读取 src/test/java 目录进行测试

当我在做的时候

mvn -Pintegration-test clean install 我看到 src/it/java 中的测试被读取用于测试

所以在命令行中一切正常。

现在我想在 eclip 上导入我的项目。当我这样做时,只有 src/test/java 用作源文件夹。 如何设置 pom.xml 以将 src/test/java 和 src/it/java 作为源文件夹?

**这是我的构建器插件配置

<plugin>    
<groupId>org.codehaus.mojo</groupId>     
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</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> 

非常感谢!

【问题讨论】:

【参考方案1】:

一般有三种方法可以解决这个问题。

使用您已经决定使用的单独文件夹进行集成测试。

.
|-- 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

要在 Eclipse 中正常工作,您需要使用 build-helper-maven-plugin 你已经建议了:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>add-test-source</id>
        <!--
            This will help m2eclipse to recognize the folder as source
            folder after update project configuration.
            Based on comment updated.
        -->
        <phase>validate</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>src/it/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>

但正如您所见,这需要在您的 pom 文件中进行一些补充配置。

除了上述之外,使用 maven-surefire-plugin 进行集成测试是完全错误的,因为 maven-surefire-plugin 用于单元测试,用于集成测试,所以最好去maven-failsafe-plugin 用于集成测试。

最好遵循单元和集成测试的命名约定。在 maven-surefire-plugin the unit tests follow the following convention:

- *Test.java
- *TestCase.java
- Test*.java

而 maven-failsafe-plugin follow the following convention: 中的集成测试

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

但有时制作一个单独的模块会更好,它只包含 集成测试将它们与单元测试分开。这可能会有所帮助,如果 集成测试的配置与单元测试不同。

所以制作这样的结构:

 +-- root (pom.xml)
     +--- mod-it (pom.xml)
     +--- mod-core (pom.xml)

您应该遵循 mod-it 中的命名约定来使用 maven-failsafe-plugin 并在maven的integration-test阶段正确执行集成测试 构建生命周期。

【讨论】:

谢谢你的回复,其实我已经添加了builder-helper-plugin但是eclipse不识别src/it/java文件夹作为源,我需要手动添加,我需要吗在 Eclipse 上安装一些东西?我已经测试在 pom.xml 中添加 testsourcedirectory 但它替换了第一个 src/test/java :) 我不能添加这个标记两次...:( 我必须将build-helper-maven-plugin 绑定到&lt;phase&gt;validate&lt;/phase&gt;。以上&lt;phase&gt;process-resources&lt;/phase&gt; 对我不起作用。否则,这个插件为我解决了这个问题。 Eclipse 现在在其自己的源文件夹中显示 src/it/java【参考方案2】:

您需要通过以下方式在 Eclipse 中手动添加 src/it/java 文件夹:

项目属性 -> Java 构建路径 -> 源选项卡 -> 添加文件夹

【讨论】:

是的我现在但是我希望它在我导入项目时自动执行此操作?

以上是关于Eclipse JAVA 分离单元测试和集成测试的主要内容,如果未能解决你的问题,请参考以下文章

练习使用Eclipse进行单元测试

Jacoco在eclipse上的集成使用

Java之单元测试工具(Junit)

现在有啥好用的java开发框架

如何使用注释在 testng + maven 中分离单元测试和集成测试?

推荐10款Java程序员使用的单元测试工具