2012-07-13 40 views
1

我目前正在成爲TDD黑客的過程中。作爲其中的一部分,我認爲像Cobertura生成的代碼覆蓋率報告是一個重要的工具。Cobertura和Jenkins中的Java日誌記錄(isLoggable)跳過

但是,我的代碼覆蓋率是有點臃腫如下面的代碼不能正確覆蓋:

if(logger.isLoggable(Level.INFO)) { 
    logger.info("blah blah blah"); 
} 

我運行詹金斯內和Maven的報告(不知道的是,可以是問題?)。 isLoggable(Level.INFO)(在我的情況下)總是如此,因此它進入並記錄。我希望能夠跳過該部分或能夠將isLoggable(Level.XX)設置爲true和false。

任何想法,提示等?也許我忽略了一切,非常感謝! :)

[編輯] 好像在Maven的Cobertura插件,它應固定在2.6的錯誤:http://jira.codehaus.org/browse/MCOBERTURA-52 但2.6尚未公佈,所以我只好等待...... [/編輯]

+0

上卸下來,如果:) – nomoa 2012-07-13 09:20:13

+0

好主意,但我的代碼不會通過審覈:) – sunlock 2012-07-13 10:07:40

回答

1

當你測試這些類時,你可以忽略某些方法/調用。報告是此後的一個步驟。

與螞蟻這樣做是這樣做的(例如從docs)。行家可能具有相同的選項,但是這依賴於Maven插件使用:

<cobertura-instrument todir="${instrumented.dir}"> 
    <ignore regex="java.util.logging.*" /> 
    <fileset dir="${classes.dir}"> 
     ... 
    </fileset> 
</cobertura-instrument> 

您只需設置一個忽略的正則表達式要已排除儀器包裝,這樣就不會出現在報告中。

與Maven這應該工作:

<instrumentation> 
    <ignores> 
     <ignore>java.util.logging.*</ignore> 
    </ignores> 
</instrumentation> 
+0

我使用maven(http://mojo.codehaus.org/cobertura-maven-plugin/)並嘗試添加忽略,但沒有任何反應,排除工作正常。有任何想法嗎?另外,我使用java.util.logging(而不是log4j)。我知道,但我現在不會改變它(除非這是我能「修正」這一點的唯一方法)。 – sunlock 2012-07-13 10:50:30

+0

我將答案更改爲java.util.logging。我知道螞蟻的方式工作,因此maven的方式也應該工作,但我從來沒有用過maven。 – oers 2012-07-13 11:01:04

+0

這就是我的...但它不工作 - 如果我添加排除它排除源文件(因此儀器部分工作,只有看起來像忽略不) - – sunlock 2012-07-13 11:52:50

0

有很好的文章中詳細解釋瞭如何排除的Cobertura儀器記錄的調用。 http://fahdshariff.blogspot.gr/2010/01/cobertura-ignore-logger-calls.html 和這裏類似的問題發佈:Exclude methods from code coverage with Cobertura

我想你可能會發現有用這兩個環節

+0

我有看到這個博客和問題,但它似乎沒有跳過它們,我目前正在運行版本2.5.1,但是如果我回滾到2.2(就像在博客文章中),它可以工作......一個錯誤呢? – sunlock 2012-07-13 12:36:08