2011-11-22 45 views

回答

105

行覆蓋率度量您採取了多少陳述(陳述通常是一行代碼,不包括註釋,條件等)。如果您爲每個條件(if,while,for)帶上true和false分支,分支覆蓋檢查。你將擁有兩倍於條件的分支。

你爲什麼在意?請看例子:

public int getNameLength(boolean isCoolUser) { 
    User user = null; 
    if (isCoolUser) { 
     user = new John(); 
    } 
    return user.getName().length(); 
} 

如果調用此方法isCoolUser設置爲true,你會得到100%的語句覆蓋率。聽起來不錯? NOPE,如果您撥打false,將會出現空指針。但是,在第一種情況下,您有50%的分支機構覆蓋範圍,因此您可以看到測試中缺少某些內容(通常在代碼中)。

+4

很好的回答!它顯示了線路覆蓋給出錯誤的良好代碼感覺! – MAGx2

45

把這個代碼作爲一個簡單的例子:

if(cond) { 
    line1(); 
    line2(); 
    line3(); 
    line4(); 
} else { 
    line5(); 
} 

如果你的測試只行使cond爲真,從不運行else分支您有:

  • 4,滿分5線覆蓋
  • 覆蓋2分支中的1分

同樣的Cobertura report本身引入了一些不錯的彈出式幫助提示單擊列標題時:

線Coverage - 此試運行執行的行的百分比。

分支範圍 - 此測試運行執行的分支的百分比。

+1

這也是一個很好的答案!簡單明瞭! – Bowen

1
if(cond){ 
    //branch 1 
}else{ 
    //branch 2 
} 

您需要解決所有行爲分支1和分支2以獲得LineCoverage和BranchCoverage的100%覆蓋率。

如果您完全錯過了其他任何東西,您將獲得一半的分支機構覆蓋面。 如果你錯過了if和else兩行中的任何內容,你將得到100%的BranchCoverage但不是100%的線覆蓋率。

希望這會有所幫助。