【问题标题】:Maven: How can I setup maven to run unit test and integration test separatelyMaven:如何设置 Maven 分别运行单元测试和集成测试
【发布时间】:2012-05-05 08:13:27
【问题描述】:

我有一个关于 maven 的问题。

我有文件名以 *Test 结尾的单元测试和文件名以 *IT 结尾的集成测试。

我的理解是,surefire 将运行单元测试,而 failsafe 将运行集成测试。

当我跑步时: mvn 干净安装

单元测试和集成测试都运行。

当我跑步时:

mvn 验证

这两个测试也都运行了。

无论如何我可以配置 maven,以便当我使用:mvn clean install 时,只运行单元测试。而当我使用 mvn verify 时,只运行集成测试?

我的 POM 构建部分如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>failsafe-maven-plugin</artifactId>
            <version>2.4.3-alpha-1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

非常感谢

【问题讨论】:

  • 由于验证阶段在安装阶段之后,因此您本质上想要的是将surefire插件的测试目标移至验证阶段。 Maven Way 的一大障碍 :) 不过我的意见..

标签: java unit-testing maven integration-testing


【解决方案1】:

here 所述,按照惯例,假设集成测试在TestNameIT.java 中命名,单元测试在TestNameUT.java 中命名,您可以使用includes 来过滤集成测试或单元测试。

【讨论】:

  • 不幸的是,我认为这是针对故障安全插件的,并且只会过滤该插件的测试。它不会影响任何单元测试行为还是我错过了什么?希望解决与发布的相同的问题。想让“mvn clean install”只运行单元测试。
【解决方案2】:

使用 Maven 设置单元集成和系统测试

我创建了一个 GitHub 存储库,您可以在其中查看可能的 maven 设置。我在这里发布这个是因为我想与其他人分享我对这个设置的想法,我认为当有人搜索关于在 SO 上使用 maven 进行测试时可以找到这个

存储库包含功能齐全的设置。

GitHub 存储库:https://github.com/StefanHeimberg/maven3-unit_integration_systemtest-setup

特点

  • Maven 3.3
  • 生产数据库和系统测试数据库迁移的 Flyway
  • 用于集成测试执行的 Arquillian
  • 用于单元测试的 Mockito

单元测试

  • 只测试了一个类/业务功能
  • 无数据库
  • 没有容器
  • 要测试的最小单元
  • 对其他类的依赖关系被模拟。 (模拟)
  • 测试在被测单元类所在工件的 src/test

集成测试

  • 多个类/业务功能一起编排和测试
  • 每个测试用例的内存数据库
  • EE 容器。为所有集成测试启动一次
  • Arquillian 远程管理野蝇
  • arquillian war (*-ds.xml) 中每个 TestCase 的数据源部署
  • 从 JPA DDL 生成数据库表 (hibernate.hbm2ddl.auto=create-drop)
  • Arquillian Deployments 仅包含测试用例本身所需的类
  • 在 @Test 或 @Before 方法中手动加载的测试数据...(测试数据构建器...)
  • 测试与其他代码分开

系统测试

  • 最终 WAR/EAR 文件的完整 Wildfly 部署。
  • 通过 *.cli 命令行命令配置容器
  • 读取使用的数据库,因为我们需要 (hibernate.hbm2ddl.auto=validate)
  • 在部署前使用 maven-flyway-plugin 设置数据库
  • 使用 sql-maven-plugin 加载的测试数据
  • 测试与其他代码分开

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 2017-09-14
    • 2013-03-18
    • 2012-01-01
    • 2011-12-11
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多