Maven:如何设置Maven以分别运行单元测试和集成测试

3
我有一个关于Maven的问题。
我有一些文件名以*Test结尾的单元测试和一些文件名以*IT结尾的集成测试。
我的理解是surefire会运行单元测试,failsafe会运行集成测试。
当我运行:
mvn clean install
单元测试和集成测试都会运行。
当我运行:
mvn verify
这两个测试也都会运行。
是否有任何方法可以配置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的方式中是一个相当大的障碍 :) 尽管如此,这是我的观点.. - Luca Geretti
2个回答

1
此处所述,按照惯例,我们将集成测试命名为TestNameIT.java,单元测试命名为TestNameUT.java,您可以使用includes来过滤集成测试或单元测试。

不幸的是,我认为这只适用于failsafe插件,并且仅会过滤该插件的测试。它不会影响任何单元测试行为,或者我错过了什么?正在寻找解决与发布的相同问题。希望只运行单元测试的“mvn clean install”。 - Alper Akture

0

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

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

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

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

特点

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

单元测试

  • 仅测试一个类/业务函数
  • 没有数据库
  • 没有容器
  • 最小的可测试单元
  • 对其他类的依赖项进行模拟(Mockito)
  • 测试位于要测试单元所在的构件的 src/test

集成测试

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

系统测试

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

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