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

时间:2014-10-21 10:01:30

标签: nunit teamcity 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

我已检查目录中是否存在所有*.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

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

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

非常感谢任何想法。

1 个答案:

答案 0 :(得分:4)

最后,我想出了发生了什么,并希望这个答案对那些仍在努力解决这个或类似问题的人有用。

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

在我的情况下,测试仅使用MY.PROJECT.A,由于外部依赖性,测试不会使用MY.PROJECT.BMY.PROJECT.C。甚至在测试中使用using MY.PROJECT.B指令,它也不算作CLR的延迟加载。

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

相关问题: