带有dotCover的TeamCity不包括覆盖率报告中的所有程序集

Ted*_* Xu 6 teamcity nunit code-coverage dotcover

我想在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
Run Code Online (Sandbox Code Playgroud)

我已检查目录中的所有*.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
Run Code Online (Sandbox Code Playgroud)

使用NUnit执行MY.PROJECT.Test.dll,并使用*Test*过滤器在coverage报告中排除此程序集.但只有MY.PROJECT.A在dotCover覆盖率报告中,MY.PROJECT.B而且MY.PROJECT.C不包括在内.

我检查了日志但没有找到错误.

任何想法都非常感谢.

Ted*_* Xu 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")

相关问题: