1、测试覆盖率工具EclEmma使用培训,测试小组,20080604,Mantis使用培训,2,目的,提高单元测试质量 ,从而提高项目整体开发效率和软件质量,Mantis使用培训,3,培训内容,术语介绍EclEmma介绍EclEmma使用安装获得测试覆盖率查看结果合并结果导出报告导入数据高级特性,Mantis使用培训,4,术语介绍,测试覆盖率测试代码对被测功能代码的覆盖程度测试覆盖率实现技术,Mantis使用培训,5,测试覆盖率实现技术,Instrumentation:代码注入,在产品代码的关键位置插入统计代码,从而获得测试覆盖率数据Class Instrumentation: 把统计代码插入编译
2、好的.class文件Source Instrumentation:把统计代码插入源代码并编译成新的.class文件Custom JVM:在JVM中把统计代码插入.class。测试覆盖率分析可以在JVM执行测试代码的过程中完成,EclEmma 为Class Instrumentation方式,不会改变项目文件中的class文件,Mantis使用培训,6,培训内容,术语介绍EclEmma介绍EclEmma使用安装Coverage运行模式查看结果合并结果导出报告导入数据高级特性,Mantis使用培训,7,EclEmma介绍,Eclipse插件工作原理:Class Instrumentation(把统
3、计代码插入编译好的.class文件) 测试覆盖率指标,Mantis使用培训,8,测试覆盖率指标,行覆盖率 部分行覆盖:ab?a:b,基本语句块覆盖率基本语句块:没有if-else分支的代码区域,类覆盖率由JVM加载并初始化,方法覆盖率第一个基本语句块被执行,测试覆盖率指标,Mantis使用培训,9,培训内容,术语介绍EclEmma介绍EclEmma使用安装Coverage运行模式查看结果合并结果导出报告导入数据高级特性,Mantis使用培训,10,安装(一),Eclipse 标准的 Update 机制远程安装,Mantis使用培训,11,安装(二),http:/update.EclEmma.o
4、rg/,Mantis使用培训,12,培训内容,术语介绍EclEmma介绍EclEmma使用安装Coverage运行模式查看结果合并结果导出报告导入数据高级特性,Mantis使用培训,13,显示Coverage工具按钮(一),Mantis使用培训,14,显示Coverage工具按钮(二),Mantis使用培训,15,显示Coverage工具按钮(三),Mantis使用培训,16,示例项目介绍,示例项目源代码组织结构:,Random:被测代码RandomTest1:Random类的第一个JUnitTestCase类RandomTest2:Random类的第二个JUnitTestCase类Other
5、: 与其他3个类无关的类(设置这个类的原因,稍后会做说明)Other包:无关包(设置这个包的原因,稍后会做说明),Mantis使用培训,17,运行测试程序,以RandomTest1为例,Mantis使用培训,18,查看结果,Mantis使用培训,19,Coverage视图,1 项目2 源文件3 包4 类5 方法,对用output路径相同的类, 无法单独为某个类分析其测试覆盖率,Mantis使用培训,20,标注源代码,绿色:全部执行,黄色:部分执行,红色:未执行,Mantis使用培训,21,导出报告,在Coverage视图主区域中点击右键,出现的快捷菜单中选择”Export Report”,Ma
6、ntis使用培训,22,导出报告,session:一次测试覆盖率交互活动要导出的session选择报告的类型(HTML/XML/Text/EMMA session)存放位置,Mantis使用培训,23,HTML报告-项目,Mantis使用培训,24,HTML报告-包,Mantis使用培训,25,HTML报告-类/方法,Mantis使用培训,26,导入session文件,可将该session的测试覆盖率数据从外部导入,Mantis使用培训,27,导入session文件,Mantis使用培训,28,培训内容,术语介绍EclEmma介绍EclEmma使用安装Coverage运行模式查看结果合并结果导
7、出报告导入数据高级特性,Mantis使用培训,29,高级特性,Coverage视图工具栏EclEmma的配置界面,Mantis使用培训,30,显示更多菜单,Coverage视图工具栏,Coverage工具栏,选择session,最小/大化视图,折叠所有节点,定位到其他视图选中的Java元素的测试覆盖率,删除当前/所有session,重新执行当前session,当只有一次测试覆盖率测试结果时,合并session按钮不可用,显示为灰色。,合并session,Mantis使用培训,31,可以将多次测试覆盖率的结果进行合并选择Coverage视图工具栏上的 按钮,进入如下界面:,合并结果,Mantis
8、使用培训,32,合并后的结果,测试覆盖率是多次测试覆盖率的累积,Mantis使用培训,33,显示更多菜单(过滤元素),点击 按钮后会出现更多菜单,以项目/根部包/当前包/类为根节点,显示各个元素的测试覆盖率,以字节码指令/语句块/行/方法/类为单位,显示元素的测试覆盖率,隐藏/过滤未使用的类,默认未选中,Mantis使用培训,34,显示更多菜单,点击 按钮后会出现更多菜单,Mantis使用培训,35,EclEmma的配置界面,在测试覆盖率工具栏中点击“Coverage”进入,Mantis使用培训,36,设置代码注入方式,Mantis使用培训,37,两种注入方式对比,Outside Instrumentation:修改class文件的备份文件(这个备份文件保存在一个与项目文件不同的临时目录中),默认方式。In-place instrumentation:直接修改项目中的class文件。一般不推荐使用这个功能。,Mantis使用培训,38,设置JUnit版本,Mantis使用培训,39,问题讨论,Mantis使用培训,40,谢谢!,