前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >JUnit+EclEmma进行覆盖测试

JUnit+EclEmma进行覆盖测试

作者头像
用户9184480
发布2024-12-17 10:14:52
发布2024-12-17 10:14:52
9000
代码可运行
举报
文章被收录于专栏:云计算linux
运行总次数:0
代码可运行

EclEmma简介

现在IT开发人员比以往任何时候都更加关注测试的重要性,没有经过良好测试的代码更容易出问题。在极限编程中,测试驱动开发已经被证明是一种有效提高软件质量的方法。在测试驱动的开发方式中,软件工程师在编写功能代码之前首先编写测试代码,这样能从最开始保证程序代码的正确性,并且能够在程序的每次演进时进行自动的回归测试。测试对于软件产品的成败起着至关重要的作用,在极限编程领域,甚至有人提议任何未经测试的代码都应该自动从发布的产品中删除。作者并不确信这个观点是正确的,但是测试本身的质量确实是一个需要高度关注的问题。测试的覆盖率是测试质量的一个重要指标,我们需要工具来帮助我们进行对软件测试覆盖的考察。

EclEmma就是这样一个能帮助开发人员考察测试覆盖率的优秀的Eclipse开源插件。EclEmma在覆盖测试领域是如此的优秀,以致于它在过去不久的2006年成为了EclipseCommunityAwardsWinners决赛选手。虽然最后EclipseCheckstylePlugin取得了BestOpenSourceEclipse-basedDevelopertool的称号,但我们也可以由此看到EclEmma对开发人员的帮助是巨大的(EclipseCommunityAward的具体信息可以参阅参考资源)。

提到EclEmma首先就要说到著名的Java覆盖测试工具Emma。Emma是一个在SourceForge上进行的开源项目(参阅参考资源)。从某种程度上说,EclEmma可以看作是Emma的一个图形界面。在本文的参考文献中,可以看到专门讲述使用Emma的技术文章。

Emma的作者开发Emma之初,程序员已经有了各种各样优秀的开源Java开发工具。举例来说,我们有优秀的集成开发环境Eclipse,有开源的JDK,有单元测试工具JUnit,有Ant这样的项目管理工具,还可以用CVS或SubVersion来进行源代码版本的维护。当时看来,也许唯一缺少的就是一个开源的覆盖测试工具了。Emma就是为了填补这项空白而生的。现在的情况已经和Emma诞生的时候不一样的。时至今日,已经有了不少的覆盖测试工具。例如Coverlipse是一个基于Eclipse的覆盖测试插件。其他还有Cobertura、Quilt和JCoverage等。但是Emma具有一些非常优秀的特性使得它更适合被广泛的使用。和Coverlipse等工具比起来,Emma是开源的,同时它对应用程序执行速度的影响非常小。

EclEmma的出现弥补了Emma用户一个大的遗憾——缺乏图形界面以及对集成开发环境的支持。将Eclipse和Emma这两个在各自领域最为优秀的工具结合起来,这就是EclEmma为我们提供的。接下来,一起看看EclEmma为开发人员提供了什么。

4.4.2 添加EclEmma支持

在官方网站http://sourceforge.net/projects/eclemma/ 下载EclEmma压缩包。

JUnit+EclEmma进行覆盖测试_EclEmma工具
JUnit+EclEmma进行覆盖测试_EclEmma工具

图1 EclEmma压缩包

解压eclemma-2.3.3.zip文件,得到plugins文件夹和features文件夹。

JUnit+EclEmma进行覆盖测试_覆盖测试_02
JUnit+EclEmma进行覆盖测试_覆盖测试_02

图2 解压ZIP文件

将解压后的文件,拷贝到MyEclipse安装目录下的dropins即可, 运行MyEclipse(如果已经运行,请重启MyEclipse),即可集成EclEmma成功。

笔者发现该方法,是最好的方法,比在线安装和本地逐个文件夹拷贝要好了N多倍!!!!

在项目右键,出现如下所示的"Coverage as表示已经成功了",或者工具栏出现快捷图标也是成功了。

JUnit+EclEmma进行覆盖测试_EclEmma工具_03
JUnit+EclEmma进行覆盖测试_EclEmma工具_03
JUnit+EclEmma进行覆盖测试_软件测试_04
JUnit+EclEmma进行覆盖测试_软件测试_04

/******************************下面是针对成绩判断做的JUnit+EclEmma的综合测试案例******************************/

代码语言:javascript
代码运行次数:0
复制
package com.aaa.vo;
/**
 * 成绩类;
 * @author 张晨光老师 
 */
public class Grade {
  public String getLevel(int score){
    String result="";
    if(score<60){
      result="不及格";
    }else if(score<70){
      result="及格";
    }else if(score<80){
      result="中等";
    }else if(score<90){
      result="良好";
    }else if(score<=100){
      result="优秀";
    }
    return result;
  }
}
代码语言:javascript
代码运行次数:0
复制
package com.aaa.test;
/**测试类
 * @author 张晨光老师
 */
import java.util.Scanner;
import junit.framework.TestCase;
import com.aaa.vo.Grade;
public class TestGrade extends TestCase {
 //1.私有对象;
 Grade grade=new Grade();
 //
 public void testGetLevel(){
  int x;
  System.out.println("请输出一个数字");
  Scanner sc=new Scanner(System.in);
  x=sc.nextInt();

  assertEquals("及格",grade.getLevel(x));
 }
}

然后在项目,点击右键选择"Coverage as"-->Junit Test,这时候出来控制台界面,需要用户输入数字

JUnit+EclEmma进行覆盖测试_路径测试_05
JUnit+EclEmma进行覆盖测试_路径测试_05

Cpverage 界面如图所示:

JUnit+EclEmma进行覆盖测试_软件测试_06
JUnit+EclEmma进行覆盖测试_软件测试_06

Grade类的覆盖测试图:

JUnit+EclEmma进行覆盖测试_软件测试_07
JUnit+EclEmma进行覆盖测试_软件测试_07

TestGrade类的覆盖测试图:

JUnit+EclEmma进行覆盖测试_路径测试_08
JUnit+EclEmma进行覆盖测试_路径测试_08

在Coverage 视图界面,选择导出,以网页报表的格式导出。

JUnit+EclEmma进行覆盖测试_覆盖测试_09
JUnit+EclEmma进行覆盖测试_覆盖测试_09
JUnit+EclEmma进行覆盖测试_路径测试_10
JUnit+EclEmma进行覆盖测试_路径测试_10
JUnit+EclEmma进行覆盖测试_测试工具_11
JUnit+EclEmma进行覆盖测试_测试工具_11
JUnit+EclEmma进行覆盖测试_测试工具_12
JUnit+EclEmma进行覆盖测试_测试工具_12
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档