这篇来学习一个单元测试领域中很重要的一个概念,代码覆盖率,这个术语,早起是在航空航天方面的软件里提出来的一个测试方法,100%代码覆盖率是一个不可能完成的任务,只是一个理想的目标。本篇先来学习代码覆盖率和周边几个名词,然后介绍一款能够给出代码覆盖率的插件,简单来学习和使用下这个插件。代码覆盖率是一个很容易在面试中被问到的问题,通过本篇学习,你起码有一个普,不会乱扯,不懂装懂。
1.代码覆盖率
在设计测试用例的时候,需要参考不同覆盖率准则进行设计测试数据,以下是常见的覆盖率准则。
函数/方法覆盖率(Function coverage):代码中覆盖测试调用每一个方法/函数。
指令/语句覆盖率(Statement coverage): 程序中每一行代码都覆盖,其实就是全路径覆盖。
判断覆盖率(Decision coverage):(和分支覆盖率不同)覆盖到各种分支可能
条件覆盖率(Condition coverage):也称为谓词覆盖(predicate coverage),每一个逻辑运算式中的每一个条件(无法再分解的逻辑运算式)都覆盖
条件/判断覆盖率(Condition/decision coverage):需同时满足判断覆盖率和条件覆盖率。
起码要保证针对一个方法的单元测试用例,要保证覆盖这个方法里面的不同行代码,参考我在前面文章中,对于二分查找算法设计的单元测试用例方法。 https://blog.csdn.net/u011541946/article/details/93631967
2.EclEmma插件
我们在写好单元测试用例之后,然后执行完单元测试,我们并不知道覆盖了多少代码,还好有一些免费的工具可以帮助我们实现,跑完单元测试就得到代码覆盖率的简单报告,接下来介绍一个Eclipse上插件 eclemma
2.1在eclipse市场上搜索并安装
2.2 运行得到覆盖率报告
安装完之后,菜单栏有以下这个图标
我们打开测试类:TrackingServiceTests.java,然后根据上图,选择Coverage as - Junit Test
上面红色表示没有被覆盖,绿色表示覆盖,Instructions是指令的意思,也就是语句覆盖。这里根据这张图来解读下我们这个被测的项目覆盖情况:语句覆盖率是80.6%, 已经覆盖了100行代码,还有24行代码没有覆盖到。下面我们来看看24行代码是只哪些,所以我们需要打开被测项目。
红色没有覆盖,说明我们还需要补充这两个方法的单元测试用例。当然,我看了被测项目全部3个java文件,没有数出来24个语句没有覆盖,这个24怎么来的却是不清楚,只能找到方法中标红的就是未覆盖的语句。
以后在写某一个class文件中方法的单元测试用例的时候,利用这个插件,可以帮我们提高覆盖率,写出更好覆盖率的单元测试用例。很好用,红色表示没有被覆盖,绿色表示覆盖,连分支和判断覆盖都给你指出来没有覆盖到,特别方便的一个工具。