测试覆盖率
当你听到谈论单元测试的时候,人们会经常提到测试覆盖率。测试覆盖率是测试用例中执行的应用程序代码的百分比。
为了度量单元测试覆盖率,你需要执行测试并且跟踪执行有或没有被执行的代码。
Coertura就是在Java中度量测试覆盖率的工具。其他类似的工具包括jcoverage和Clover。
Cobertura的工作原理是插装Java字节码,将自己的代码段插入到已经编译好的代码中。测试用例执行时,这些度量代码覆盖率的代码段也被执行。
通常来说,百分之百的代码覆盖率是比较理想的。实际的情况并不总是这样,而且也要权衡成本和效益比。
一个简单的反例就是下面Java代码中的getter方法:
private int positiveValue,
void setPositiveValue (int x) {
this .positiveValue=x;
}
int getPositiveValue () {
return positiveValue;
如果我们为这个方法写一个测试用例,将会获得更高的测试覆盖率。但是从另一个角度来说,这对我们来说并没有什么实际的意义。我们真正测试的是仅仅是Java的实现没有错误。如果setter方法包含了值是否为负的检查,情况就不一样了。一旦方法包含了这样的逻辑,单元测试就显得有意义了。