測試覆蓋率
當你聽到談論單元測試的時候,人們會經常提到測試覆蓋率。測試覆蓋率是測試用例中執(zhí)行的應用程序代碼的百分比。
為了度量單元測試覆蓋率,你需要執(zhí)行測試并且跟蹤執(zhí)行有或沒有被執(zhí)行的代碼。
Coertura就是在Java中度量測試覆蓋率的工具。其他類似的工具包括jcoverage和Clover。
Cobertura的工作原理是插裝Java字節(jié)碼,將自己的代碼段插入到已經編譯好的代碼中。測試用例執(zhí)行時,這些度量代碼覆蓋率的代碼段也被執(zhí)行。
通常來說,百分之百的代碼覆蓋率是比較理想的。實際的情況并不總是這樣,而且也要權衡成本和效益比。
一個簡單的反例就是下面Java代碼中的getter方法:
private int positiveValue,
void setPositiveValue (int x) {
this .positiveValue=x;
}
int getPositiveValue () {
return positiveValue;
如果我們?yōu)檫@個方法寫一個測試用例,將會獲得更高的測試覆蓋率。但是從另一個角度來說,這對我們來說并沒有什么實際的意義。我們真正測試的是僅僅是Java的實現(xiàn)沒有錯誤。如果setter方法包含了值是否為負的檢查,情況就不一樣了。一旦方法包含了這樣的邏輯,單元測試就顯得有意義了。