使用mock之后单元测试可以完全不依赖外界环境,比如database(一般使用hsqldb in memory db来实现database测试,mock db太麻烦了),ftp server,web service或者其他的功能模块。Mock测试带来的问题就是各个类,模块之间的集成测试完全没有做,这个时候就需要集成测试。单元测试maven有surefire插件实现自动化,集成测试则有failsafe plugin。
Failsafe和maven结合,将整个集成测试分为4个阶段:
1. pre-integration-test 启动测试环境,比如通过容器插件cargo启动容器,加载应用
2. integration-test 执行集成测试用例,
3. post-integration-test 清理测试环境
4. verify 检测测试结果
其中pre/post integration test主要是负责启动应用和测试后停止应用,一般通过容器插件,jetty plugin, tomcat plugin 或者高级点的cargo plugin来实现。2和4歩则是由failsafe来实现。
1,3歩的实现可以参考我之前的bloghttp://blog.csdn.net/cloud_ll/article/details/39831323
之所以选择cargo是它可以加载命令行参数,这样就可以通过jacoco来统计测试覆盖率,tomcat plugin就无法做到这一点。
2,4歩failsafe配置如下,主要是找到test文件夹下所有 “/ITCase.java”,”/IT.java” 和”**/*IT.java” 测试用例。如果测试用例有其他的特征,可以通过在configuration节点Include/exclude来实现。具体可以参考failsafe的官方文档:https://maven.apache.org/surefire/maven-failsafe-plugin/
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
Note: 集成用例如果和单元测试用例放在同一个项目里,必须在在单元测试的surefire中exclude所有的集成测试用例。
原文地址:http://blog.csdn.net/cloud_ll/article/details/45290169