测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标。测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档。进一步考虑,测试覆盖率可以看作是产品代码质量的间接指标--之所以说是间接指标,因为测试覆盖率评价的是测试代码的质量,并不是产品代码的质量。代码覆盖率是一种白盒测试,因为测试覆盖率是评价产品代码类内部的指标,而不是评价系统接口或规约。测试覆盖率尤其用于评价测试代码是否已经覆盖了产品代码所有的路径
1、EclEmma coverage安装
有两种方法:1、eclipse中点击工具栏的 help--install new software 显示如下截图
点击Add,弹出如下
在name中填写安装软件的名字(自己命名),location中填写如下网址:
http://update.eclemma.org/
接下来,只要一路next就OK了,安装成功后eclipse工具栏会添加一个新图标
如果出现上面截图表示成功
2、第二种方法更简单
eclipse中点击工具栏的 help-- Eclipse marketplace 如下图
按照红线标注的操作,安装完后eclipse工具栏出现第一种安装说明最后截图中的图标,表示安装成功。
2、coverage使用
首选选择你要测试的Test测试类,右击,右键菜单里面多了一个Coverage as的选项,选择JUNIT,这时测试程序会在JUNIT中执行一遍,如果代码有多种情况,可以多次执行,吧多次统计的测试代码覆盖路进行整合,生成覆盖率统计结果。(java application 程序也可以直接用 coverage as 执行)
实例
百度中看到一个很好的例子,这里借用一下:
public class HelloWorld {
public static void main(String[] args) { new HelloWorld(); int rand = (int) (Math.random() * 100); if (rand % 2 == 0) { System.out.println("Hello, world! 0"); } else System.out.println("Hello, world! 1"); int result = rand % 2 == 0 ? rand + rand : rand * rand; System.out.println(result); }
}
按照上面说的coverage使用,执行一下, 可以看到如下截图
绿色:代码被执行过
黄色:代码部分被执行过
红色:代码没有被执行过
在下面的Coverage视窗中,可以看到代码测试覆盖率。看代码,是取得随机数,if判断可能出现不满足,可能满足的情况, 需要多次执行该代码,得到多次的代码覆盖率,然后吧多次得到的覆盖率合并,得到这个类总的代码测试覆盖率。
(其中有一句:new HelloWorld(); 该行代码是为了调用,该类默认的构造器。我认为:每个类都有默认的构造器,只是没有显示的代码而已,如果这里不写,代码覆盖率会降低,第一行public class HelloWorld 绿色也会变成红色 )
总的统计如下:
箭头所指为合并多次执行后的覆盖率百分比
3、总结
1)、coverage 可以测试java application程序,也可以测试JUnit 测试类
2)、如果要测试整个项目中代码的测试覆盖率,可能比较麻烦,至少需要吧所有代码的测试类执行一遍,并且把所有代码执行的路径都考虑到才准确(不知道有没有对整个项目测试的好方法,最起码我还不知道 -.-)
3)、别忘记测试异常情况,空指针,或者其他异常后,执行异常代码,也会增加代码测试覆盖率的
4)、如果得到代码测试覆盖率比较高,显而易见能看出代码安全性会比较能保证(最起码测试无误)