2010-08-10 27 views
11

我on Rails項目當前的Ruby確實通過rcov(具體relevance rcov測試,我們有一個非常高的標準(我們構建失敗,如果我們有< 95%的代碼覆蓋率)。Rcov覆蓋劇烈變化與-xrefs

我們用下面的命令來測試這一點:

rcov_cmd = "rcov --rails --text-summary \ 
      --include #{included_dirs} \ 
      --exclude #{excluded_dirs} \ 
      --aggregate #{coverage_dir}/coverage.data \ 
      --output #{coverage_dir} \ 

今天,我發現一些代碼,在rcov報告Homever登記綠色(其運行),我可以證明,這個代碼是沒有得到運行(我養在函數開始處有個例外,並且我的單元測試通過)

我做了一些研究,發現了rcov的--xrefs標誌,我認爲它會爲rcov報告中的每一行添加所有調用者。

我改變了rcov命令:

rcov_cmd = "rcov --rails --text-summary --xrefs \ 
     --include #{included_dirs} \ 
     --exclude #{excluded_dirs} \ 
     --aggregate #{coverage_dir}/coverage.data \ 
     --output #{coverage_dir} \ 

(注意加入--xrefs標誌)。

取而代之的是額外的呼叫站點信息,我改爲將測試覆蓋率從96%提高到48%。

是否--xrefs改變了rcov的分析方式? (我認爲它只會收集電話信息)。這與第一個命令有何不同/更好? (我見過的單元測試覆蓋率下降,如果有一個失敗的單元測試,我知道,如果有在運行一個錯誤的覆蓋率會下降,但對我來說很好)

+0

您是否試過僅使用'--callsites'並且沒有'--xrefs'來確定它是否實際上包含的引起差異的callsites信息?可能會縮小問題的範圍。 – Shadwell 2010-08-17 22:35:54

+0

我更換了--xrefs和--callsites,並且在測試覆蓋率上看到了同樣的下降 – RyanWilcox 2010-08-18 17:14:41

回答

1

rcov manual

--[no-]callsites 
    Show callsites in generated XHTML report. (somewhat slower; disabled by default) 
--[no-]xrefs 
    Generate fully cross-referenced report. (includes --callsites) 

Rcov CallSiteAnalyzer Class

A CallSiteAnalyzer can be used to obtain information about: 

    * where a method is defined ("defsite") 
    * where a method was called from ("callsite") 

有了這個分析rcov可以提供更長的執行成本更準確的覆蓋信息。