我们有一个非常大的源代码树,包含许多解决方案/项目。我们正在尝试提高单元测试覆盖率并整合CI环境(TFS)。但是,在使用VS 2015的“分析所有测试的代码覆盖率”时,我们项目的 某些 将不会生成代码覆盖率。我们只是得到“生成空结果:没有检测到二进制文件”。消息。
通过在测试资源管理器中选择所有测试,右键单击,然后选择“分析所选测试的代码覆盖率”,可以在开发计算机上轻松解决此问题。不幸的是,这无法解决CI环境中的问题。
在这两种情况下都运行单元测试,我可以看到通过/失败结果。
我无法找到任何押韵或理由,为什么在某些项目中发生这种情况,而不是其他项目。我们有一个runsettings文件来防止计算测试程序集的覆盖范围,但是,排除它只会导致测试程序集包含在coverage中。仍然缺少被测代码的覆盖范围。
据推测,底层命令的运行方式有所不同。有没有理由为什么代码覆盖存在于一个而不是另一个?如何修复我的项目以确保在TFS服务器上运行或使用VS2015界面中的“分析所有测试的代码覆盖率”时正确计算覆盖率?
附加说明:
我可以使用命令行在我的项目上复制visual studio行为。
不提供保险:
vstest.console.exe /EnableCodeCoverage "TestAssembly.dll"
是否提供保险:
vstest.console.exe /EnableCodeCoverage /Tests: Test1 Test2 Test3 ... TestN "TestAssembly.dll"
附加说明2 我跑了
vstest.console.exe /EnableCodeCoverage "TestAssembly.dll"
所有单元测试均按预期运行并通过。
之后我运行了this blog末尾建议的CodeCoverage分析。
CodeCoverage.exe analyze /include_skipped_modules my.coverage > analysis.xml
“AssemblyUnderTest.dll”未出现在modules部分或skipped_modules部分中。我知道正在运行“AssemblyUnderTest.dll”,因为我可以调试测试并打入该程序集的代码,并且如上所述,测试在此测试运行期间运行并通过。代码引用的其他程序集存在于skipped_modules部分中,原因为“no_symbols” - 这是预期的。