Visual Studio 2015“分析所有测试的代码覆盖率”返回在某些项目中生成的空结果

时间:2016-10-17 21:43:34

标签: c# tfs visual-studio-2015 code-coverage mstest

我们有一个非常大的源代码树,包含许多解决方案/项目。我们正在尝试提高单元测试覆盖率并整合CI环境(TFS)。但是,在使用VS 2015的“分析所有测试的代码覆盖率”时,我们项目的 某些 将不会生成代码覆盖率。我们只是得到“生成空结果:没有检测到二进制文件”。消息。

通过在测试资源管理器中选择所有测试,右键单击,然后选择“分析所选测试的代码覆盖率”,可以在开发计算机上轻松解决此问题。不幸的是,这无法解决CI环境中的问题。

在这两种情况下都运行单元测试,我可以看到通过/失败结果。

我无法找到任何押韵或理由,为什么在某些项目中发生这种情况,而不是其他项目。我们有一个runsettings文件来防止计算测试程序集的覆盖范围,但是,排除它只会导致测试程序集包含在coverage中。仍然缺少被测代码的覆盖范围。

据推测,底层命令的运行方式有所不同。有没有理由为什么代码覆盖存在于一个而不是另一个?如何修复我的项目以确保在TFS服务器上运行或使用VS2015界面中的“分析所有测试的代码覆盖率”时正确计算覆盖率?

附加说明:

  • 正在测试的项目都是.NET 4.0类库。这些项目中有一些WinForms代码,但表格正被排除在报道范围之外。
  • 使用测试项目模板创建测试项目。

我可以使用命令行在我的项目上复制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” - 这是预期的。

0 个答案:

没有答案