Java 代码覆盖率注入方式
来源:互联网 发布:王者荣耀延迟高4g网络 编辑:程序博客网 时间:2024/06/08 16:08
得到代码覆盖率大致需要三步:
1. 注入(instrumentation)
2.运行Tests,得到Coverage data
3.生成报表
所以注入这一步是得到代码覆盖率的基础。注入的目的是给被测试的代码加一些额外的代码用于在测试运行Test时统计及保存那些语句被Test执行了。反编译了一个Cobertura注入的方法就能够大致了解注入是怎么一回事了:
原方法:
public HashMap<String, String> handleRequest() {HashMap<String, String> model = new HashMap<String, String>();String helloRaptor = "Say hello to Raptor!" ;model.put("greeting", helloRaptor);return model;}
注入后的方法:
public HashMap<String, String> handleRequest() { __cobertura_counters[2] += 1; HashMap model = new HashMap(); __cobertura_counters[3] += 1; String helloRaptor = "Say hello to Raptor!"; __cobertura_counters[4] += 1; model.put("greeting", helloRaptor); __cobertura_counters[5] += 1; return model; }
由此可见运行测试用例时就可以通过注入好的代码统计每一行代码是否被执行。
业界做代码覆盖率的 注入主要有三种方式:
1. 直接源代码注入
2. 注入到编译好的Class
3. 注入到JVM运行时字节码中
我们来看一下业界常用的代码覆盖率工具是如何做的。商用的Clover的注入方式是1,源代码注入。 Cobertura和Emma采用的是第2种,注入到编译好的Class文件中,也被称为Offline 字节码注入。Jacoco采用第三种方式,采用JVM Tool Interface将Agent加入到JVM后启动,注入到JVM中的Class,即On-The-Fly字节码注入。
当然不同的注入方式和统计方式势必导致代码覆盖率统计结果的差别。另外这种为得到代码覆盖率进行的注入也会导致测试运行的时间增长。
0 0
- Java 代码覆盖率注入方式
- android java代码覆盖率
- java 代码覆盖率
- JAVA代码覆盖率检测工具-EMMA
- Emma:Java代码覆盖率工具
- 代码注入方式
- 代码覆盖率
- 代码覆盖率
- 代码覆盖率
- 代码覆盖率
- Java 代码测试覆盖率的Eclipse插件
- [Java测试]使用Cobertura度量代码覆盖率
- Java 代码测试覆盖率的Eclipse插件
- Java单元测试(Junit+Mock+代码覆盖率)
- Java单元测试(Junit+Mock+代码覆盖率)
- Java单元测试(Junit+Mock+代码覆盖率)
- Java单元测试(Junit+Mock+代码覆盖率)
- Java单元测试(Junit+Mock+代码覆盖率)
- js 数组清空的两个方法
- 指针数组和数组指针
- ThinkPHP3.1.2整合UCenter详解(四)
- sqlserver与access通用的连接数据库代码
- CentOS6.5搭建LNMP
- Java 代码覆盖率注入方式
- C++中的函数指针和函数对象总结(转)
- [android开发]封装BaseAdapter, 简便代码
- 网络协议杂谈
- 一种分表的想法
- Android开发工具下载地址
- property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- Transfer-Encoding详解以及erlang中的实现
- SQL Server 列转行