魅族mx耳机这个耳机怎么样啊,怎么这么便宜啊,能听

JaCoCo:分析单元测试覆盖率的利器
前言随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(Java
Coverage)就是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然。EclEmma
是基于 JaCoCo 的一个 Eclipse 插件,开发人员可以方便的和其交互。因此,本文先从 EclEmma 入手,给读者一个直观的体验。使用 EclEmma 在 Eclipse 中查看单元测试覆盖率EclEmma 是基于 JaCoCo 的 Eclipse 插件,使用它,开发人员可以直观地看到单元测试的覆盖情况。安装 EclEmma打开 Eclipse 的软件市场,在其中搜索 EclEmma,找到后完成安装,如下图所示:图 1. 安装 EclEmma安装完成后,Eclipse 的工具条里会多出下面这样一个图标:图 2. Coverage 图标分析单元测试覆盖率成功安装 EclEmma 后,就可以试着用它来分析项目的单元测试覆盖率了。为了方便演示,我们使用 Eclipse 创建了一个标准 Java
工程。其中包含一个数学工具类,用来计算三个数中的最大值,代码如下:清单 1. 数学工具类package com.dw.
public class MathUtil {
public static int max(int a, int b, int c){
if(a & b){
if(a & c){
if(b & c){
}可以看到,这里的算法稍微有点复杂,使用到了多个条件判断分支,因此,特别适合为其编写单元测试。第一个版本的单元测试如下:清单 2. 第一个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
}试着运行一下单元测试覆盖率分析工具:40.0%!似乎不太理想。展开分析报告,双击后在编辑器里可以看到覆盖情况被不同的颜色标识出来,其中绿颜色表示代码被单元测试覆盖到,黄色表示部分覆盖,红色则表示完全没有覆盖到,如下图所示:图 3. 单元测试覆盖率报告让我们尝试多加一些单元测试,来改善这种情况,请看下面第二个版本的单元测试:清单 3. 第二个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
public void test_max_10_20_30() {
assertEquals(30, MathUtil.max(10, 20, 30));
public void test_max_100_200_300() {
assertEquals(300, MathUtil.max(100, 200, 300));
}测试覆盖率还是
40.0%!虽然我们额外再加了两个测试,但覆盖率没有半点提升,这些单元测试其实是重复的,它们在重复测试同一段代码。如果单纯追求单元测试的数量,那么这无疑会给管理者造成错觉,他们觉得单元测试的数量增加了,软件的质量更有保证了;而对于那些喜欢偷懒的程序员,也蒙混过关,但却给软件质量埋下了隐患。让我们删掉这些重复的单元测试,重新思考一下怎么测试这个方法。首先我们要测试正常情况,这其中又包含 3
种情况:第一个参数最大,第二个参数最大,以及最后一个参数最大。然后我们还需测试几种特殊情况,比如三个参数相同,三个参数中,其中两个相同。让我们照此思路重新编写单元测试:清单 4. 第三个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
public void test_max_1_3_2() {
assertEquals(3, MathUtil.max(1, 3, 2));
public void test_max_3_2_1() {
assertEquals(3, MathUtil.max(3, 2, 1));
public void test_max_0_0_0(){
assertEquals(0, MathUtil.max(0, 0, 0));
public void test_max_0_1_0(){
assertEquals(1, MathUtil.max(0, 1, 0));
}再次运行单元测试分析工具:75.0%!这次比以前有了很大提升,但是结果还不能令人满意,打开分析报告可以看到,有一个分支还是没有覆盖到,如图所示:图 4. 单元测试覆盖率报告阅读代码可以看出,这种情况是指第一个参数大于第二个参数,却小于第三个参数,因此我们再增加一个单元测试:清单 5. 再增加一个单元测试@Test
public void test_max_2_1_3() {
assertEquals(3, MathUtil.max(2, 1, 3));
}再运行一遍单元测试分析工具:100.0%!终于我们的单元测试达到了全覆盖,这样我们对自己开发的代码更有信心了。当然,我们在这里并不是为了单纯的追求这个数字,在增加单元测试覆盖率的诱导下,我们重新理清了测试的步骤,写出了更有意义、更全面的单元测试。而且根据单元测试分析工具给的反馈,我们还发现了先前没有想到的情形。因此,单元测试的覆盖率并不只是一个为了取悦管理者的数据,它实实在在地帮助我们改善了代码的质量,增加了我们对所编写代码的信心。给管理者的单元测试覆盖率报告管理者天生喜欢阅读报告。他们不会屈尊坐在你的办公桌前,让你向他展示 Eclipse
中这一片花花绿绿的东西。而且这份报告对他们至关重要,他们需要用它向上级汇报;年底回顾时,他们也可以兴奋地宣称产品的单元测试覆盖率增加了多少。作为一名开发人员,我们很大一部分工作量就在于满足管理者的这种需求。因此,本节我们讨论如何将
JaCoCo 集成到 Ant 脚本中,生成漂亮的单元测试覆盖率报告。准备工作在集成 JaCoCo 前,必须先确保你的 Java 工程有一个可执行的 Ant 构建脚本。一个简单的 Ant
构建脚本一般会执行如下任务:编译(包括编译工程代码和测试代码)、打包和执行单元测试。下面是本文示例 Java 项目所用的 Ant
构建脚本,读者可结合自己的项目及文件路径,在此基础之上进行修改。清单 6. build.xml&project name="math" basedir="." default="junit"&
&!--预定义的属性和 classpath --&
&property name="src.dir" value="src" /&
&property name="test.dir" value="test" /&
&property name="build.dir" value="build" /&
&property name="classes.dir" value="${build.dir}/classes" /&
&property name="tests.dir" value="${build.dir}/tests" /&
&property name="jar.dir" value="${build.dir}/jar" /&
&property name="lib.dir" value="lib" /&
&path id="classpath"&
&fileset dir="${lib.dir}" includes="**/*.jar" /&
&!--清除上次构建 --&
&target name="clean"&
&delete dir="${build.dir}" /&
&!--编译代码,包括单元测试 --&
&target name="compile" depends="clean"&
&mkdir dir="${classes.dir}" /&
&mkdir dir="${tests.dir}" /&
&javac srcdir="${src.dir}" destdir="${classes.dir}" /&
&javac srcdir="${test.dir}" destdir="${tests.dir}"&
&classpath&
&path refid="classpath" /&
&path location="${classes.dir}" /&
&/classpath&
&!--打包 --&
&target name="jar" depends="compile"&
&mkdir dir="${jar.dir}" /&
&jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"&
&!--运行单元测试 --&
&target name="junit" depends="jar"&
&junit printsummary="yes"&
&classpath&
&path refid="classpath"/&
&path location="${classes.dir}" /&
&path location="${tests.dir}" /&
&/classpath&
&batchtest fork="yes"&
&fileset dir="${test.dir}" includes="**/*Test.java"/&
&/batchtest&
&/project&集成 JaCoCo首先需要从 然后就是使用
需要的版本,然后将下载得到的压缩文件解压,将其中的
jacocoant.jar 拷贝至 Java 工程下存放第三方 jar 包的目录,在示例工程里,我有一个和 src 平级的 lib 目录,jacocoant.jar
就放到了这个目录底下,读者可根据自己的项目组织结构做相应调整。然后我们需要在 Ant 构建脚本中定义新的任务:清单 7. 定义新的构建任务&taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"&
&classpath refid="classpath" /&
&/taskdef&现在就可以在 Ant 构建脚本中使用 JaCoCo 了。需要注意的是,为了避免命名冲突,需要给 Ant 构建脚本加入新的 XML 命名空间:清单 8. 加入新的 JaCoCo 命名空间&project name="math" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" default="junit"&我们主要使用 JaCoCo
的两个任务:首先是jacoco:coverage,用来生成单元测试覆盖率数据,这是一个二进制文件,为了生成从该文件生成报表,我们还要调用另外一个任务jacoco:report,它的输入为jacoco:coverage生成的二进制文件,输出报表。报表有多种格式可选,可以是
HTML、XML、CSV 等。具体的脚本如下:清单 9. 使用 JaCoCo 生成测试覆盖率和报表&jacoco:coverage destfile="${build.dir}/jacoco.exec"&
&junit fork="true" forkmode="once" printsummary="yes"&
&classpath&
&path refid="classpath" /&
&path location="${classes.dir}" /&
&path location="${tests.dir}" /&
&/classpath&
&batchtest fork="yes"&
&fileset dir="${test.dir}" includes="**/*Test.java"/&
&/batchtest&
&/jacoco:coverage&
&jacoco:report&
&executiondata&
&file file="${build.dir}/jacoco.exec"/&
&/executiondata&
&structure name="dw demo"&
&classfiles&
&fileset dir="${classes.dir}"/&
&/classfiles&
&sourcefiles encoding="UTF-8"&
&fileset dir="${src.dir}"/&
&/sourcefiles&
&/structure&
&html destdir="${build.dir}"/&
&/jacoco:report&JaCoCo
的任务定义非常清晰,在这里略作说明。首先需要将原来的junit任务嵌入jacoco:coverage,而且需要指定fork="true",代表单元测试需要另起一个
JVM 执行,否则 JaCoCo 就会执行失败。destfile="${build.dir}/jacoco.exec"指定生成的测试覆盖率文件输出到什么地方,后面生成报告的时候需要输入该文件的地址。然后就是使用 jacoco:report 生成报告,指定前面任务生成的单元测试覆盖率文件、编译好的类文件以及源代码,最后选择一种格式,这里使用
html,生成报告。打开报告的存放路径,就可以看到如下所示的单元测试覆盖率报告:图 5. HTML 版的单元测试覆盖率报告和同类产品比较市面上流行的单元测试覆盖率工具还有
和 。和它们相比,JaCoCo 有如下优势: JaCoCo 拥有友好的授权形式。JaCoCo 使用了 Eclipse Public License,方便个人用户和商业用户使用。而 Clover 对于商业用户是收费的。 JaCoCo 被良好地集成进各种工具中。在 Java 社区里,很多流行的工具都可以集成 JaCoCo,比如
SonarQube、Jenkins、Netbeans、Eclipse、IntelliJ IDEA、Gradle 等。 JaCoCo 社区非常活跃,它是目前唯一支持 Java 8 的单元测试覆盖率工具。而且关于 JaCoCo 的文档相对较多,降低了学习门槛。结束语本文为大家介绍了如何使用 JaCoCo 分析项目的单元测试覆盖率,文章先从 JaCoCo 的 Eclipse 插件 EclEmma
开始,直观地介绍了如何一步步提高单元测试质量,最终达到对代码的全覆盖;然后为大家介绍了如何将 JaCoCo 集成到 Ant 构建脚本中,生成漂亮的单元测试覆盖率报告。但是使用 JaCoCo 只是第一步,重要的是开发人员能够根据工具所给的反馈,不断改进自己的单元测试,写出高质量的代码。
相关主题参考 ,jazz.net 上一篇关于单元测试的文章,其中也提到了单元测试覆盖率,需要 jazz 帐号登录才可访问。参考 ,EclEmma 官方网站。参考 ,维基百科上关于 JaCoCo 的介绍,并且和其他类似工具作了对比。参考 ,JaCoCo 提供的 Ant 相关任务。参考 ,将 JaCoCo 集成到 Maven 的教程。参考 ,JaCoCo 官网提供的示例构建脚本,展示了 JaCoCo 的基本用法。参考 ,Ant
官网提供的简易教程,帮助新手使用 Ant 构建 Java 项目。访问 developerWorks ,了解关于信息管理的更多信息,获取技术文档、how-to
文章、培训、下载、产品信息以及其他资源。
添加或订阅评论,请先或。
有新评论时提醒我
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Java technologyArticleID=980366ArticleTitle=JaCoCo:分析单元测试覆盖率的利器publish-date=安装部署Sonar+jacoco,生成case覆盖率统计报告 - 玄大冰 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
已转开发,博客新地址:/
安装部署Sonar+jacoco,生成case覆盖率统计报告
& 13:31:35 / 天气: 阴雨
/ 心情: 平静
/ 个人分类:
经常有些项目需要Java自动化case(集成case)来做功能回归,但是自动化case的如何保证呢?最近主管介绍了这个工具,很好用。使用方法使用后自动化case的覆盖率从65%提高到85%,遇到开发代码重构或者优化的事情再也不怕了。使用方法很简单,根据sonar的统计报告,可以看到哪些代码没有被覆盖到,有针对性地补充对应的case就可以了。下面介绍具体的安装部署使用步骤,下面会再写一篇介绍覆盖率报告。------------------------服务端:安装sonar ------------------------& & &sonar是一个管理代码质量的开放式平台。详细的部署安装sonar文档请参考官方文档:http://docs.codehaus.org/display/SONAR/Installation+and+Upgrade& & &这里列出本次使用所涉及的步骤。1.下载sonar-xx.zipwget http://dist.sonar.codehaus.org/sonar-3.4.1.zip下载页面详情 /software-development/ide/sonar2.html2. 解压sonar-xx.zip文件。& & unzip sonar-3.4.1.zip3. 启动sonar(简单到难以置信)& & &cd sonar-3.4.1& & &./bin/linux-x86-64/sonar.sh start4. 查看sonar是否启动成功:sonarip=xx.xx.xx.xx假设部署在http://sonarip/上面,访问http://sonarip:9000/能够出来sonar的管理界面就表示启动ok了。& & &备注:1.如果在启动sonar中遇到问题,就使用sonar.sh console来启动,看看是哪里报错的,我在启动过程中遇到这台机器的/tmp目录居然不能够write。^^2.默认的登录账号和密码都是admin----------------------客户端:使用jacoco来生成覆盖率的文件、报告----------------------1.使用jacoco来生成覆盖率的文件:jacoco.exec1. 获取到下载到的jacocoagent.jar存放目录: /home/a/jacocoagent.jar2. 要修改服务器配置---带上-javaagent选项。【简单理解:javaagent类似于拦截器,在执行java的main方法之前,它会先执行javaagent里面的实现的premain方法】修改java容器(jboss或者tomcat)启动jvm的选项:& & & & & * jboss:在文件/home/a/jboss-4.2.2.GA/bin/run.conf的最后添加下面的一行:& & & & & & & &JAVA_OPTS="$JAVA_OPTS -javaagent:/home/a/jacocoagent.jar=destfile=/home/a/project/download/jacoco.exec"& & & & & & &&& & & & & * tomcat:在目录下面/opt/taobao/tomcat/bin新建一个文件setenv.sh文件,内容如下:& & & & & & & &export CATALINA_OPTS="-javaagent:/home/a/jacocoagent.jar=destfile=/home/a/project/download/jacoco.exec"& & & & &&3.编译部署被测代码,启动服务器最终查看ps -ef | grep java的时候,能够看到-javaagent选项。4. 执行黑盒/集成/自动化。它会生成覆盖率文件jacoco.exec,生成文件的路径就是在步骤#2中-javaagent中指定的(/home/a/project/output/jacoco.exec)。5. 停止jboss/tomcat服务。一定要停止jboss/tomcat服务,注意使用kill &pid&,不能使用kill -9 &pid&来杀死java进程,原因是jacoco是在jboss/tomcat停止的时候,挂钩子来生成jacoco.exec文件的。kill -9是强制杀死进程,没法产生jacoco.exec文件的6. 查看jacoco.exec文件是否已经生成以及更新时间是否为当前时间ll /home/a/project/download/jacoco.exec2.使用sonar来生成覆盖率的报告---处理jacoco.exec1. 获取到被测工程的一份源代码,一般是从svn中check out出来。2. 修改它的pom.xml文件,增加sonar插件在pom.xml中的&build&&plugins&....&/plugins&&/build&中增加下面几行:&plugin&&groupId&org.codehaus.mojo&/groupId&&artifactId&sonar-maven-plugin&/artifactId&&&version&2.0&/version&&/plugin&注意,该插件必须要求mvn3.0以上版本3. 执行下面的命令来生成报告:& & &sudo mvn clean install -Ptest sonar:sonar -Dmaven.test.failure.ignore=true -Dsonar.jdbc.url=jdbc:h2:tcp://sonarip:9092/sonar -Dsonar.host.url=http://sonarip:9000 -Dsonar.jacoco.itReportPath="/home/a/project/download/jacoco.exec" -Dsonar.dynamicAnalysis& & &其中,& & & & & * sonar.jacoco.itReportPath:jacoco生成的覆盖率数据文件。& & & & & * sonar.jdbc.url:sonar使用的链接地址(上文“安装sonar”中sonar被部署到的机器),如果sonar服务也是安装在这台机器上面,就可以省略。(默认值:jdbc:h2:tcp://localhost:9092/sonar)& & & & & * sonar.host.url:sonar服务的地址,同sonar.jdbc.url,如果sonar服务也是安装在这台机器上面,就可以省略。(默认值:http://localhost:9000)4. So,如果一切顺利的话,你访问http://sonarip:9000,就能够看到集成测试的覆盖率数据了。Enjoy!【如果在Dashboards上面找不到Integration tests coverage这个widget,可以在Dashboards上面添加的】参考文档:http://www.sonarsource.org/measure-code-coverage-by-integration-tests-with-sonar/http://www.sonarsource.org/measure-coverage-by-integration-tests-with-sonar-updated/http://docs.codehaus.org/display/SONAR/User+Guide/wiki/display/MIFOS/How+to+get+setup+sonar+coverage+report+for+integration+testshttp://www.eclemma.org/jacoco/ (需要翻墙)我们经常会使用sonar做代码质量检查。
可以简单的通过两条命令进行增量检查:
/home/sonar/sonar-runner-dist-2.4/bin/sonar-runner -Dproject.settings=./sonar-project-base.properties -Dsonar.preview.readTimeout=300 -e
/home/sonar/sonar-runner-dist-2.4/bin/sonar-runner -Dproject.settings=./sonar-project-new.properties &-Dsonar.preview.readTimeout=300 -e
sonar-project-base.properties内容如下:
sonar.projectKey=code_base&
sonar.projectName=code_base&
sonar.projectVersion=12.16&
sonar.sources=src/java&
sonar.tests=src/test
sonar.binaries=build/classes&
sonar.projectBaseDir=/home/code
sonar.modules=module1,module2,module3
sonar.sourceEncoding=GBK&
sonar.my.property=value&
sonar.analysis.mode=incremental
sonar.issuesReport.html.enable=true
sonar.issuesReport.console.enable=true
#sonar.jacoco.reportPath=/home/code_base/build/jacoco/test.exec
sonar.dynamicAnalysis=reuseReports
sonar.java.coveragePlugin=jacoco
sonar-project-new.properties内容如下:
sonar.projectKey=code_new&
sonar.projectName=code_new&
sonar.projectVersion=12.16
sonar.sources=src/java&
sonar.tests=src/test
sonar.binaries=build/classes&
sonar.projectBaseDir=/home/code
sonar.modules=module1,module2,module3
sonar.sourceEncoding=GBK&
sonar.analysis.mode=preview
sonar.my.property=value&
sonar.issuesReport.html.enable=true
sonar.issuesReport.console.enable=true
#sonar.jacoco.reportPath=/home/code_base/build/jacoco/test.exec
sonar.dynamicAnalysis=reuseReports
sonar.java.coveragePlugin=jacoco
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4058次
排名:千里之外
(1)(1)(2)(1)(2)18869人阅读
CI(持续集成)(2)
Jacoco覆盖率工具使用之maven篇
之前的文章已经介绍过如何使用apacheant 执行jacoco工具,下面开始介绍如何使用maven使用jacoco工具。
1.首先新建一个maven项目
& & & 如图所示:
2:HelloWorld
& & 新建一个测试类helloworld,code 如图所示:
3:HelloWorldTest
&&新建一个测试类helloworld test,code 如图所示:
4:编辑pom.xml文件
& & & & & & 编辑pom.xml文件,增加依赖包和jacoco配置,文件如下所示:
& & & &&&project xmlns=&http://maven.apache.org/POM/4.0.0& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xsi:schemaLocation=&http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&&
&modelVersion&4.0.0&/modelVersion&
&groupId&com.test.jacoco&/groupId&
&artifactId&testJacoco&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&name&JaCoCo Examples&/name&
&properties&
&project.build.sourceEncoding&UTF-8&/project.build.sourceEncoding&
&project.reporting.outputEncoding&UTF-8&/project.reporting.outputEncoding&
&!-- Sonar --&
&sonar.java.coveragePlugin&jacoco&/sonar.java.coveragePlugin&
&sonar.dynamicAnalysis&reuseReports&/sonar.dynamicAnalysis&
&!-- The destination file for the code coverage report has to be set to the same value
in the parent pom and in each module pom. Then JaCoCo will add up information in
the same report, so that, it will give the cross-module code coverage. --&
&sonar.jacoco.itReportPath&${project.basedir}/target/jacoco.exec&/sonar.jacoco.itReportPath&
&sonar.language&java&/sonar.language&
&/properties&
&dependencies&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.8.1&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.11&/version&
&scope&test&/scope&
&/dependency&
&/dependencies&
&pluginManagement&
&groupId&org.jacoco&/groupId&
&artifactId&jacoco-maven-plugin&/artifactId&
&version&0.5.3.&/version&
&/plugins&
&/pluginManagement&
&groupId&org.jacoco&/groupId&
&artifactId&jacoco-maven-plugin&/artifactId&
&configuration&
&includes&com.*&/includes&
&/configuration&
&executions&
&execution&
&id&pre-test&/id&
&goal&prepare-agent&/goal&
&/execution&
&execution&
&id&post-test&/id&
&phase&test&/phase&
&goal&report&/goal&
&/execution&
&/executions&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-compiler-plugin&/artifactId&
&configuration&
&source&1.5&/source&
&target&1.5&/target&
&/configuration&
&/plugins&
&/project&
5:打包测试
& & 如图所示:
6: 执行结果
& &执行结果:
至此,基于maven的jacoco的使用讲解完了,整合jenkins 和 sonar 请参考“Jacoco覆盖率工具使用”;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1342741次
积分:8469
积分:8469
排名:第2196名
原创:95篇
转载:62篇
评论:130条
阅读:3570
文章:14篇
阅读:35760
阅读:4452
(1)(8)(1)(9)(1)(1)(1)(22)(1)(2)(2)(2)(1)(4)(2)(3)(15)(14)(14)(34)(13)(15)江南白衣,公众号:春天的旁边
Sonar + Jacoco,强悍的UT, IT 双覆盖率统计
以前做统计代码测试覆盖,一般用Cobertura。以前统计测试覆盖率,一般只算Unit Test,或者闭上眼睛把Unit Test和Integration Test一起算。
但是,我们已经过了迷信UT的时代:
UT不支持大幅度重构,如果对类和方法进行重构拆分,UT就失去了保障重构后代码仍然正确的作用,还要花时间按新的类和方法重写,其他用例对旧类和方法的mock改起来也是噩梦。
UT不支持基于用户故事的测试,即使覆盖率100%了,也不保证就是产品经理想要的东西。
UT对输入参数和Mock对象行为的假设,其实存在潜在的风险
多线程,网络等等难于测试的地方。
在我看来,使用嵌入式容器的集成测试,如Spring Boot所倡导的基于嵌入式Jetty,H2等等的一整套集成测试体系,集合了UT(可本地快速运行,可直接assert应用内部属性,可统计覆盖率,如果CI失败了可以本地单独运行、debug、修复失败的case再提交)与FT(基于用户故事黑盒测试)的优点,对项目质量保证的地位一点不比UT低,所以同样需要计算覆盖率,而不是传统测试金字塔模型,只依赖UT的覆盖率。
所以Sonar + Jacoco 这种同时显示UT和IT测试覆盖率的组合非常实用。
照抄,用maven插件,很容易就能跑出效果来,略。
花了我半天时间的,是如何用Jenkins上的SonarQubeRunner,跑出相同的效果,因为SonarQubeRunner不认识Maven是谁。
网上都是半新半旧,不咸不淡的文章,自己又摸索了一轮,得出一个只要一条不漏,便保证能跑的Jenkins + Maven + Sonar + Jacoco配置
在Jenkins上使用最新的SonarQube Runner 2.4,填入下面的配置
sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=xxx
sonar.modules=moduleA,moduleB,IT module C
#这里假设moduleA,moduleB 在根目录下的一层目录,Module C在二层目录下,需额外定义
#moduleC.projectBaseDir=xxx/moduleC
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.sources=src/main/java
sonar.tests=src/test/java
sonar.binaries=target/classes
#排除一些不想统计的类
#sonar.exclusions=**/*IDL.java
sonar.java.coveragePlugin=jacoco
sonar.jacoco.itReportPath=xxx/moduleC/target/jacoco-it.exec,最好写成绝对路径
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
参考资料:
广州今天继续热的要命
This entry was posted in . Bookmark the .

我要回帖

更多关于 魅族耳机小米能用吗 的文章

 

随机推荐