6

我想在 TeamCity 上运行 NUnit 并使用 dotCover 生成报告。但由于某些原因,我无法获得所有项目程序集的覆盖率报告。

TeamCity 配置如下

Teamcity: 6.5.3 
NUnit: 2.5.10 
.NET Runtime: Platform: x86
.NET Runtime: Version: v4.0
dotCover: bundled with TC not customized

我已经检查了所有*.dll *.xml *.pdb文件都在目录中,如下所示(未列出参考 DLL)

MY.PROJECT.A.dll
MY.PROJECT.A.pdb
MY.PROJECT.A.xml
MY.PROJECT.B.dll
MY.PROJECT.B.pdb
MY.PROJECT.B.xml
MY.PROJECT.C.dll
MY.PROJECT.C.pdb
MY.PROJECT.C.xml
MY.PROJECT.Test.dll
MY.PROJECT.Test.pdb
MY.PROJECT.Test.xml

MY.PROJECT.Test.dll 使用 NUnit 执行,并且使用 *Test* 过滤器将这个程序集排除在覆盖率报告中。但仅MY.PROJECT.A在 dotCover 覆盖率报告中,而MY.PROJECT.BMY.PROJECT.C不包括在内。

我检查了日志,但没有发现错误。

任何想法都非常感谢。

4

1 回答 1

4

最后,我弄清楚了发生了什么,并希望这个答案对那些仍在为这个或类似问题苦苦挣扎的人有用。

基本上,dotCover 只包括代码覆盖率报告中的测试实际使用的那些程序集(更准确地说,是那些由 CLR 加载的程序集) 。

在我的情况下,仅MY.PROJECT.A用于测试,MY.PROJECT.B并且MY.PROJECT.C由于外部依赖关系而未被测试使用。即使using MY.PROJECT.B在测试中有指令,它也不算作 CLR 的延迟加载。

显示这两个程序集的 0% 覆盖率报告的一种虚拟解决方法是,要么在测试中使用程序集中的任何内容,要么通过调用强制加载这些程序集System.Reflection.Assembly.Load("MY.PROJECT.B")

相关问题:

于 2014-10-22T02:56:38.323 回答