Maven 如何配置Integration Test

集成测试(Integration Test)简介

在很多项目的实际开发过程中,上线之前是需要做很多测试的,典型的有unit-test,function-test(有些项目不用),integration-test,E2E-test等,unit-test是代码粒度的测试,一般是伪造一些输入来测试函数粒度的功能,而integration-test往往需要系统部署后之后才能进行相应的测试,是系统级别输入的功能测试,所以我们在实际的代码打包过程就不能让integration-test提前执行,需要deploy新的代码,重启系统之后再执行integration-test,否则由于没有运行着的系统,integration-test是无法通过的

Maven生存期

Maven本身支持的命令(Goals)是有顺序的,越后面执行的命令,会将其前面的命令和其本身按顺序执行一遍,具体的顺序如下所示:

validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install

从上面maven的生存期可以看出,install命令是最复杂的goal,它会将所有的goals都执行一遍,最终生成项目包,并发布到本地的或者配置的.m2仓库中,那问题就来了,我们如何使其能够在install的时候不执行某些goals呢,比如我们的integration-test就是个例子。

配置POM.XML

实际上POM.XML提供了很强大的配置功能,这里利用一个maven的插件,叫maven-failsafe-plugin,具体配置如下:


        org.apache.maven.plugins
        maven-failsafe-plugin
        2.17
        
            
                integration-tests
                
                    integration-test
                    verify
                
                
                    
                        none
                    
                    
                        **/*IT.java
                    
              
            
        

这里创建了一个execution,当执行integration-test goal的时候,执行包括“IT.java”结尾的所有java文件,那如何跳过unit test,integration-test呢?看下面利用了另外一个插件,叫maven-surefire-plugin,如下配置:


       org.apache.maven.plugins
       maven-surefire-plugin
       2.6
       
              false
       

通过skip标签来指定跳过test的行为,默认是支持skipITs和skipTests,前者是跳过integration-test,后者是跳过所有的测试(稍微说明下,跳过测试方法有很多种,比如maven-failsafe-plugin本身也支持加入skip选项,只不过实现之后每个命令的含义就略微有不同了,大家选择自己最习惯的就好了).

Maven 命令

有了上面的配置,我们就可以执行相应的run commands了,具体每个命令的含义如下:

  • 打包
mvn package
  • 跳过所有测试(BTW, 测试文件还是会被编译的)
mvn package -DskipTests
  • 推荐的测试目录结构
Unit Test Classes        : src/test/java/**/**Test.java
Integration Test Classes : src/test/java/**/**IT.java
TestCases dependent files: src/test/resources/*
  • 编译并且只运行unit test
mvn clean test
  • 编译并且只运行integration-test
mvn failsafe:integration-test
  • 运行unit test和integration-test
mvn clean integration-test
  • 发布包并且不运行任何的测试
mvn install -DskipTests
  • 发布包并且只运行unit-test
mvn clean install -DskipITs
  • 发布包并且运行ut加it
mvn clean install

你可能感兴趣的:(Maven 如何配置Integration Test)