基于IDEA的单元测试
·
单元测试目的是以最小的粒度保证代码的可靠性,从回归测试角度来考虑,可以在服务每次编译时自动调用单元测试,并将测试结果以邮件方式发送给相关人员,从而对每次提交的代码自动进行监测汇报,这些操作过程都有相关的插件可以完成,我们使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的覆盖率进行统计;黄色为单元测试函数对应的状态,通过这种方式可以对单元测试类的覆盖率直接进行统计。

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

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


所有评论(0)