单元测试目的是以最小的粒度保证代码的可靠性,从回归测试角度来考虑,可以在服务每次编译时自动调用单元测试,并将测试结果以邮件方式发送给相关人员,从而对每次提交的代码自动进行监测汇报,这些操作过程都有相关的插件可以完成,我们使Jenkins + Maven + Junit + JaCoCo来实现。JUnit完成基本的单元测试功能;JaCoCo用来进行代码覆盖率统计;Jenkins用来集成上述插件,在打包之前进行单元测试,并生成单元测试报告以及代码覆盖率报告,打包完成后将测试报告通过Email插件发送出去;Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过maven-surefire-plugin插件来执行JUnit或者TestNG的测试用例。
在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:
**/Test*.java:任何子目录下所有命名以Test开关的Java类。
**/*Test.java:任何子目录下所有命名以Test结尾的Java类。
**/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。
各插件配置如下
1)JUnit Generator -辅助自动生成单元测试类
    Preferences->Plugins->Browse repositories->JUnitGenerator V2.0
2)maven-surefire-plugin
<plugin> 
        <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.8.1</version>
                <configuration>
                    <skipTests>false</skipTests>
                    <junitArtifactName>junit:junit</junitArtifactName>
                    <excludes>
                        <exclude>**/*_Roo_*</exclude>
                    </excludes>
                </configuration>
            </plugin>
3)JaCoCo
             <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                                 <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
在完成单元测试类开发后,简易的方式可以使用Idea先对类进行单元测试,具体操作如图class-UT-test,其中深红色为操作项;浅红色为单元测试结果,分别基于class、method和line的覆盖率进行统计;黄色为单元测试函数对应的状态,通过这种方式可以对单元测试类的覆盖率直接进行统计。

![class-UT-test](https://img-blog.csdn.net/20160923204019212)

整个工程的单元测试结果就需要借助Jekins来进行统计,在Jekins配置完成后,构建程序后,可以生成如图project-UT—test的统计数据。

![project-UT-test](https://img-blog.csdn.net/20160923204841152)

在具体进行单测时,我们对类以及函数覆盖率并未达到100%,而是直接省去对一些简单的get、set函数、独立无法完成的函数(如对Tair访问)以及一些测试类的测试,原因是这部分测试价值太低,当然,如果时间充裕的话,全覆盖当然是最好的了。在用例选择上尽量让用例去覆盖所有流程处理分枝,从而保证较高的行覆盖率,当然测试用例也可能会遗漏掉某些情况,后续根据遇到的问题会持续进行补充,以保证回归单元测试的可靠性。

更多推荐