我碰到同樣的問題,所以我花了一些時間來逆向工程,答案是捐給Stack 溢出。
對於每一個Java assert
語句來,的Cobertura跟蹤的兩個條件:
- 無論給定的斷言語句與斷言檢查啓用或禁用執行。
- 謂詞是否實際評估爲true或false。
因此,總共有四個結果是可能的。在一個HTML報告爲給定的行中提供 的信息包括
- 結果爲條件1(取出的2 0-2可能性,解決與檢查啓用或禁用執行),
- 和結果條件2(從2中取出0-2個可能性:斷言通過或失敗)。
- 整體結果(0-4開出4)
典型場景的是:
運行的Cobertura一次,斷言檢查禁用。 您會得到:
啓用/禁用:50%(禁用); 通過/失敗:0%(未達到);因此整體爲25%。
的Cobertura將報告爲
Conditional coverage 25% (1/4) [each condition 50%, 0%]
運行的Cobertura一次,斷言檢查啓用。 通常,您的斷言總是如此,因此您得到:
啓用/禁用:50%(啓用); 通過/失敗:50%(始終爲真);因此整體:50%。
運行Cobertura兩次,一次斷言檢查 啓用,一次沒有。 假設斷言總是如此,我們得到:
啓用/禁用:100%(啓用和禁用); 通過/失敗:50%(始終爲真);因此整體75%。
然後,如果我們添加一些測試用例來確保定聲明 失敗至少一次,並通過至少一次,我們得到 所有數字爲100%。
但是請注意,如果你是通過合同, 使用斷言在設計風格,你一般不會甚至能夠讓他們失敗了, 一看便知到另一個堆棧溢出 問題,Cobertura coverage and the assert keyword。
最後:雖然這些數字是可以解釋的,但我不確定它們是否非常有用。我的偏好是能夠從總體報告中省略斷言相關的報道。 Clover可以做到這一點,但我不知道這個功能很好的開源覆蓋率分析工具。
你能發佈相關的POM配置(兩次運行JUnit測試)嗎? – 2012-04-16 14:49:11