TestNG和Maven配置指南

为了有用,自动测试应该运行得非常快。 否则,将不会在开发期间经常运行,甚至在开发人员工作站的默认配置中将被忽略。 最简单的规则是仅编写小型单元测试,该测试将模拟给定类的邻居。 但是,有时在IoC容器上下文(Spring,CDI,Guice)或使用嵌入式数据库(H2,HyperSQL,Derby)中测试某些东西很有用/必需。 不幸的是,即使是这种类型的测试,也可能显着增加总体测试执行时间。 我在一个项目中遇到这种情况,并且为了避免使用skipTests标志,我使用了TestNG和Maven Surefire插件中的组开发了一种解决方案。

测试分为三组:

  • 非常快速的真实单元测试(默认情况下全部为)–在开发过程中应经常运行(通过IDE或通过mvn测试,mvn软件包)
  • 集成速度较慢,但​​自给自足的测试(设置Spring上下文和/或使用嵌入式H2数据库)–至少应在提交/推送之前或在给定部件上运行时运行(通过IDE或通过mvn集成测试,mvn安装)
  • 真正的集成测试(要求访问远程服务器,例如测试Web服务或REST)应每天由CI服务器或从事集成工作的开发人员运行(mvn安装,mvn集成测试并启用其他配置文件)

为了实现给定的测试(或测试类),必须将其标记为“自集成”或“集成”(在方法或类级别):

@Test(groups = "self-integration")
public void shouldInitializeChainedAppInfoProperly() {
@Test(groups = "integration")
public class FancyWebServiceIntegrationTest {

Maven Surefire插件应配置为从默认执行中排除“自集成”和“集成”测试组,并在“集成测试阶段”添加“自集成”:

<build>

    <plugins>

        (...)

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-surefire-plugin</artifactId>

            <version>${ver.surefire-plugin}</version>

            <executions>

                <execution>

                    <id>default-test</id> <!-- to override default configuration - in fact: unit tests -->

                    <configuration>

                        <excludedGroups>self-integration,integration</excludedGroups>

                    </configuration>

                </execution>

                <execution>

                    <id>self-integration</id>

                    <phase>integration-test</phase>

                    <goals>

                        <goal>test</goal>

                    </goals>

                    <configuration>

                        <groups>self-integration</groups>

                        <reportsDirectory>target/self-integration-surefire-reports/</reportsDirectory>

                    </configuration>

                </execution>

            </executions>

        </plugin>

    </plugins>

</build>

另外(如果需要),可以创建在“集成测试”阶段配置的带有“集成”测试组的单独的单独配置文件。

<profiles>

    (...)

    <profile>

        <id>integration</id>

        <build>

            <plugins>

                <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-surefire-plugin</artifactId>

                    <version>${ver.surefire-plugin}</version>

                    <executions>

                        <execution>

                            <id>integration</id>

                            <phase>integration-test</phase>

                            <goals>

                                <goal>test</goal>

                            </goals>

                            <configuration>

                                <groups>integration</groups>

                                <reportsDirectory>target/integration-surefire-reports/</reportsDirectory>

                            </configuration>

                        </execution>

                    </executions>

                </plugin>

            </plugins>

        </build>

    </profile>

</profiles>

可以在AppInfo的人工分支(pom.xml和示例测试类)中找到工作示例。 根据您的需求很容易采用它。

三个测试组都有各自独立的报告格式,以免彼此覆盖。 作为扩展,可能可以将它们合并到一个汇总的测试报告中。

参考: 跑得快单元测试的时候,慢整合很少- TestNG的和Maven配置指南从我们JCG伙伴马尔钦Zajaczkowski在固态软博客。


翻译自: https://www.javacodegeeks.com/2012/04/testng-and-maven-configuration-guide.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值