集成测试时使用独立的数据库
1.需求:
引用
开发环境的db经常会出现错误数据的问题,原因是多方面的,例如程序自测时的bug,不规范的开发人员经常会手动更改db的数据等,所以单元测试和集成测试需要独立的db来避免由于错误数据造成的test failed的情况,或者是造成的偶然test success的情况
2.思路
引用
单元测试需要在src/test/resources下建立db配置文件,测试时就不会再读取src/main/resources下的同名db配置文件
集成测试时会通过maven-jetty-plugin启动jetty,这时jetty运行的war需要到src/test/resources下读取db配置文件
3.难点
引用
maven install也会运行verify,这时集成测试与install都使用dev_profile,也就是使用同一个db配置文件,如果因为集成测试而使用verify_profile,会造成install的war使用的是集成测试的db,无法deploy并交付测试
另外install无法只skip集成测试,它只允许skipTest,导致单元测试和集成测试都skip
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
引用
jetty6对应的是maven-jetty-plugin,jetty7+对应的则是jetty-maven-plugin,参数useTestClasspath也变为useTestScope
相关推荐
bobljm 2020-07-07
xiaoyezihanghui 2020-03-07
jszy 2020-03-06
abdstime 2020-01-18
oraclemch 2019-12-23
Tinazhou 2016-11-22
strongyoung 2012-02-14
carandcat 2011-11-18
sharpljc 2011-10-04
李春春 2010-12-22
SidelightofLife 2010-08-28
landizlan 2009-05-07
程序方案代码 2019-06-30
上班打发 2016-11-22
石羊 2019-06-30
oxuzhenyi 2014-08-20