因为之前没有用过这方面的工具,所以只能Google一下了,发现有很多这方面的工具,看着比较顺眼的有JCoverage, EMMA, Cobertura等等,因为JCoverage收费了,所以最后挑了一个自己感觉生成的report比较好看的学习了一把:Cobertura。 (如果有更好的工具,还望不吝赐教)
刚看到Cobertura的时候,比较纠结,因为不认识这个词儿,也查不到是什么意思,据说是西班牙语的“覆盖率”之类的意思,我也无从考究了,反正现在我是老写错,囧RZ...
以上都是闲篇儿...
--- James Gosling mused: "I don't think anybody tests enough of anything."
做单元测试是developer都要接触的事情,工具也基本上都是选择JUnit或者TestNG,但是无论是JUnit还是TestNG都只能得出一个测试用例相关的报表
从这个报表中我们能得信息是,测试用例的执行情况,成功率,失败率,哪个失败了等等。通过这份报表我们并不能得悉我们是否把所有的功能代码都测试到了,那么这时候我们就需要引入单元测试覆盖率的概念了。
单元测试覆盖率通俗的讲就是多少行代码被测试用例运行到了,多少个block被执行了,多少个包被执行了等,通过这些数据我们可以清楚的了解测试的覆盖率情况,进而反向的改善已有的或者新添加测试用例去尽可能多的覆盖功能代码,block等,以提高代码的可信赖度。
对于Java而言,进行覆盖率分析的方式有三类:第一种是将instrumentation(不知道怎么翻译好,测试仪表?),直接加入到源代码中;第二种是将instrumentation加入到编译好的Java字节码中;第三种是在一个可编辑的虚拟机中运行代码。Cobertura选择了第二种方式。
为了便于使用,Cobertura提供了两种方式将Cobertura集成到已有的运行环境中: Ant和命令行
总结起来Cobertura做的事情就是:
1. Cobertura将instrumentation加入到编译好的需要被检测的Java类的字节码中。
2. 运行测试用例的时候Cobertura通过之前安插好的instrumentation统计每一行代码是否被执行,所有被植入instrumentation的类的序列化信息将被写入cobertura.ser。
3. 根据统计结果生成报表,格式为XML或者HTML。
整个过程不需要我们额外写任何Java代码,只需要通过ant脚本或者命令行触发相应的操作。
单元测试覆盖率通俗的讲就是多少行代码被测试用例运行到了,多少个block被执行了,多少个包被执行了等,通过这些数据我们可以清楚的了解测试的覆盖率情况,进而反向的改善已有的或者新添加测试用例去尽可能多的覆盖功能代码,block等,以提高代码的可信赖度。
对于Java而言,进行覆盖率分析的方式有三类:第一种是将instrumentation(不知道怎么翻译好,测试仪表?),直接加入到源代码中;第二种是将instrumentation加入到编译好的Java字节码中;第三种是在一个可编辑的虚拟机中运行代码。Cobertura选择了第二种方式。
为了便于使用,Cobertura提供了两种方式将Cobertura集成到已有的运行环境中: Ant和命令行
总结起来Cobertura做的事情就是:
1. Cobertura将instrumentation加入到编译好的需要被检测的Java类的字节码中。
2. 运行测试用例的时候Cobertura通过之前安插好的instrumentation统计每一行代码是否被执行,所有被植入instrumentation的类的序列化信息将被写入cobertura.ser。
3. 根据统计结果生成报表,格式为XML或者HTML。
整个过程不需要我们额外写任何Java代码,只需要通过ant脚本或者命令行触发相应的操作。