使用maven实现单元测试和集成测试

单元测试是对最小单元即方法的测试,要隔离对他模块的依赖,一般采用stub和mock两种方式

集成测试是对功能的测试,对于大部分web模块来说需要启动web容器,进行集成测试

maven生命周期中已经包含测试(test)和集成测试(integration-test),但未对两种测试代码做区分,需要自己解决启动web容器和代码区分问题。

首先配置mavenjetty插件在集成测试阶段自动启动

   
<plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.10</version>
                <configuration>
                    <stopPort>9966</stopPort>
                    <stopKey>stop-jetty-for-it</stopKey>
                    <contextPath>/SDKAuth</contextPath>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                    <jettyEnvXml>${basedir}/src/test/resources/jetty-env.xml</jettyEnvXml>
                </configuration>
                <executions>
                    <execution>
                        <id>start-jetty</id>
                        <!--集成测试前启动jetty-->
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <daemon>true</daemon>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-jetty</id>
                        <!--集成测试结束停止jetty-->
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

然后测试代码进行单元测试和集成测试区分,一般有两种方式:

一是使用mavenprofile,通过profile区分

二是根据生命周期,配置mavensurefire插件不同生命周期的includes或/exclueds属性

我使用的方式二,在src/test/java目中把单元测试代码放在unit包,集成测试代码放在integration包,具体配置如下:

  
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>run-integration-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <skip>false</skip>
                            <includes>
                                <include>**/integration/**/*.java</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>run-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <skip>false</skip>
                            <includes>
                                <include>**/unit/**/*.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <dependentWarExcludes>WEB-INF/lib</dependentWarExcludes>
                </configuration>
            </plugin>
        </plugins>

可以参考http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

运行集成测试命令:mvnintegration-test

引用

2012-05-1615:36:44.293::INFO:StartedSelectChannelConnector@0.0.0.0:8080

[INFO]StartedJettyServer

[INFO]Startingscanneratintervalof10seconds.

-------------------------------------------------------

TESTS

-------------------------------------------------------

Testsrun:1,Failures:0,Errors:0,Skipped:0,Timeelapsed:0.346sec

Results:

Testsrun:1,Failures:0,Errors:0,Skipped:0

[INFO]------------------------------------------------------------------------

[INFO]BUILDSUCCESS

相关推荐