集成测试时使用独立的数据库

1. 需求:
[quote]开发环境的db经常会出现错误数据的问题,原因是多方面的,例如程序自测时的bug,不规范的开发人员经常会手动更改db的数据等,所以单元测试和集成测试需要独立的db来避免由于错误数据造成的test failed的情况,或者是造成的偶然test success的情况
[/quote]

2. 思路
[quote]单元测试需要在src/test/resources下建立db配置文件,测试时就不会再读取src/main/resources下的同名db配置文件
集成测试时会通过maven-jetty-plugin启动jetty,这时jetty运行的war需要到src/test/resources下读取db配置文件
[/quote]

3. 难点
[quote]maven install也会运行verify,这时集成测试与install都使用dev_profile,也就是使用同一个db配置文件,如果因为集成测试而使用verify_profile,会造成install的war使用的是集成测试的db,无法deploy并交付测试
另外install无法只skip集成测试,它只允许skipTest,导致单元测试和集成测试都skip
[/quote]

4. 解决方案

<!-- maven-jetty-plugin增加配置useTestClasspath -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>stop-jetty-for-it</stopKey>
<stopPort>9999</stopPort>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8888</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
<reload>manual</reload>
<!-- 使得集成测试使用src/test/resources的配置 -->
<useTestClasspath>true</useTestClasspath>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>


5. 关于maven-jetty-plugin
[quote]jetty6对应的是maven-jetty-plugin,jetty7+对应的则是jetty-maven-plugin,参数useTestClasspath也变为useTestScope
[/quote]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值