2010-08-10 187 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可以提供更长的执行成本更准确的覆盖信息。