单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

原文链接:http://www.cnblogs.com/zishi/p/6726664.html
-----如何快速完成单元测试代码
1. JUnit安装(http://junit.org/junit4/ 目前最新版本是4.12)
注:下面的一些演示图片是按照我本地的4.11版本,差别不大。
在项目上右键- Properties- java build path - Libraries, 点击Add External JARs, 选中刚刚下载的Junit包即可。如图所示:

或者使用以下方式添加:
在项目上右键- Properties- java build path - Libraries, 点击Add Library…,如下图所示:

在弹出窗口中,选中Junit,点击Next按钮继续:

接下来就是选择当前版本,我们目前使用的大版本是Junit 4,可以看到我本地版本为4.11,点击Finish按钮完成:

2. JaCoCo和EclEmma安装
JaCoCo(Java Code Coverage)是一种分析单元测试覆盖率的工具JaCoCo(Java Code Coverage)就是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然。EclEmma 是基于 JaCoCo 的一个 Eclipse 插件,开发人员可以方便的和其交互。下面简单介绍这两个工具的安装流程。
JaCoco安装:
首先我们访问JaCoco网站:http://www.eclemma.org/jacoco/ 下载最新版本,目前是:http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.7.9/jacoco-0.7.9.zip
压缩包解压后,将其中的Jar包拷贝到Java工程下面存放第三方Jar包的目录。比如在我本地存放在这里D:\tools\luna-withtestng\luna\eclipse\plugins

重新启动Eclipse IDE即可加载JaCoCo插件。接下来我们安装EclEmma:
打开 Eclipse 的软件市场,在其中搜索 EclEmma,找到后完成安装,如下图所示:

直接安装即可。
3. 自动生成单元测试代码(默认Java项目已Ready):
选择需要生成单元测试代码的项目,并在需要生成测试代码的类上点右键 - New – Other…,如下图所示:

在弹出窗口选择JUnit文件夹,点击展开,选择第一个“JUnit Test Case”,然后点击“Next”:

确认一下选中的Junit版本,其他全部按照默认选项即可:

确认无误,点击“Next”按钮,进入下一步:

此处选中我们需要生成单元测试代码的方法即可,此处我选择了之前写好的两个需要测试的函数,然后点击”Finish”按钮,最终对应生成的单元测试代码如下:

4. 运行单元测试
鼠标选中要运行的代码,EclEmma安装后直接可以点击IDE上方的工具栏,有一个运行按钮,如下图:

注:如果没有安装EclEmma插件,可以通过菜单Run As – Junit test执行单元测试
毫无疑问的,这次运行失败了:

详细的失败log如下:
HelloWorldTest.testAddMethod
testAddMethod(com.test.jacoco.HelloWorldTest)
java.lang.AssertionError: Not yet implemented
at org.junit.Assert.fail(Assert.java:88)
at com.test.jacoco.HelloWorldTest.testAddMethod(HelloWorldTest.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
………..
从上方的抛出的信息中,可以看到我们生成的断言中指定的消息“Not yet implemented”,另外,失败原因是我们默认生成的是一个fail断言,我们看一下关于fail断言的描述:
|
|
fail |
|
|
所以非常清楚的知道,这个断言的用途就是为了使单元测试立即失败,它其实并没有测试到我们的具体代码。
接下来我们给他们分别添加具体的测试代码和断言,如下图所示:

代码完成之后,继续调用Run As – Junit test,运行,这次毫无疑问运行成功了,看下图:

这样我们就完成了两个函数的单元测试代码覆盖。这里我们又用到了两个常用断言:assertNotNull()和
assertEquals()。Junit提供很多断言方法给我们,正确使用这些断言可以帮助我们确定被测试的函数是否按照预期的效果正常工作了,非常方便。我们在本文的最后部分提供了附录文档,详细介绍了Junit的全部断言目录,有兴趣的同学可以继续查看。
5. 查看单元测试覆盖率
JaCoCo和EclEmma安装完成后增加了以下特性:
1、未覆盖代码标记为红色,如下图:

2、已覆盖代码会标记为绿色,如图所示:

3、当然也有部分覆盖的情况,如图所示(还有可能是因为代码未完全执行):

4、在Eclipse下方的状态栏窗口,增加了一栏“Coverage”,点击可以显示详细的代码覆盖率:

5、颜色也可以在Eclipse中自定义设置:


以上是本次插件的全部介绍。我们通过这些工具可以快速生成单元测试代码,并利用分析工具将单元测试覆盖率尽量提高,这样我们对自己开发的代码更有信心了。当然,我们在这里并不是为了单纯的追求这个数字,在增加单元测试覆盖率的诱导下,我们重新理清了测试的步骤,写出了更有意义、更全面的单元测试。而且根据单元测试分析工具给的反馈,我们还发现了先前没有想到的情形。因此,单元测试的覆盖率并不只是一个为了取悦管理者的数据,它实实在在地帮助我们改善了代码的质量,增加了我们对所编写代码的信心。
6. 附录文档:Junit Assert目录
|
Junit Assert目录 |
||
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertFalse |
|
|
|
assertFalse |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotNull |
|
|
|
assertNotNull |
|
|
|
assertNotSame |
|
|
|
assertNotSame |
|
|
|
assertNull |
|
|
|
assertNull |
|
|
|
assertSame |
|
|
|
assertSame |
|
|
|
assertThat |
|
|
|
assertThat |
|
|
|
assertTrue |
|
|
|
assertTrue |
|
|
|
fail |
|
|
|
||
感谢阅读,作者原创技术文章,转载请注明出处
其他推荐相关阅读:
单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率
单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
单元测试系列之七:Sonar 数据库表关系整理一(rule相关)
单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率的更多相关文章
- 单元测试系列:如何使用JUnit+JaCoCo+EclEmma完成单元测试
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6726664.html -----如 ...
- 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门
前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...
- 单元测试系列之三:JUnit单元测试规范
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...
- 单元测试系列:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- 单元测试系列:Mock工具Jmockit使用介绍
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...
- 单元测试系列之五:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- 单元测试系列之十一:Jmockit之mock特性详解
本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...
- 单元测试系列之十:Sonar 常用代码规则整理(二)
摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...
- 单元测试系列之九:Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
随机推荐
- [LeetCode] Basic Calculator IV 基本计算器之四
Given an expression such as expression = "e + 8 - a + 5" and an evaluation map such as {&q ...
- mybatis05--多条件的查询
public interface StudentDao { /** * 前台的表单给出的查询条件不能封装成一个对象的时候 * 查询只能是多个参数了! 也就是参数不全是Student中的属性! * 这时 ...
- js设计模式(七)---模板方法模式
模板方法模式 模板方法模式是一种只需要继承就可以实现的非常简单的模式. 模板方法模式是由两部分组成,第一部分是抽象父类,第二部分是具体实现的子类, 主要适用在同级的子类具有相同的行为放在父类中实现,而 ...
- Echarts . 在柱状图中添加自定义值 (键值对)
x ["需求"] {"0":"使用Echarts根据数据加载一个饼状图"} {"1":"点击哪个饼状图,弹出此 ...
- Xcode工程编译错误之iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported.
概要: 在我们升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no l ...
- sass基础学习(一)
移动端布局各种问题 pc端布局各种问题sass 组件模块化面向对象编程ajax 框架学习 webpack 打包 性能优化 gulp是基于Nodejs的自动任务运行器她能自动化地完成 javascrip ...
- VBA语法总结
为了控制Excel,学了些VBA,总结下语法,下文分为五部分: 一.代码组织 二.常用数据类型 三.运算符 四.控制流 五.常用内置函数 一.代码组织 1.能写代码的地方有{模块,类模块}. 2.代码 ...
- Ubuntu 使用命令行连接无线网
一.查看可以使用的无线网: nmcli dev wifi 二.连接无线网: nmcli dev wifi connect ‘essid’(网络名称) password ‘password’(密码) 可 ...
- 点击图片img提交form表单
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Windows 下运行Makefile文件
下载并安装Microsoft Visual Studio2017 配置环境变量: 计算机右击-属性-高级系统设置-环境变量-选择Path编辑-添加nmake的路径: D:\Microsoft Visu ...