从Visual Studio 2015中的代码覆盖率中排除自动属性

Iai*_*way 7 c# mstest code-coverage c#-6.0 visual-studio-2015

我刚刚将一堆项目升级到VS2015/C#6.

现在,MSTest的代码覆盖率分析报告单元测试未涵盖某些自动属性.在Visual Studio 2013中并非如此,我怀疑它可能与C#6中的新autoproperty功能有关.

处理所产生的所有误报都会使代码覆盖率工具的目的失败,因为它几乎不可能识别缺乏测试覆盖率的实际代码.我们不想为所有DTO编写单元测试,而且我真的不需要通过项目注释每个自动属性ExcludeFromCodeCoverage.

我在https://github.com/iaingalloway/VisualStudioCodeCoverageIssue创建了一个有效的MCVE


  • VisualStudio2013.sln在Visual Studio 2013 Premium或Ultimate中打开.
  • 单击测试 - >分析代码覆盖率 - >所有测试.
  • 观察"代码覆盖率结果"窗口报告0块"未涵盖".

  • VisualStudio2015.sln在Visual Studio 2015 Enterprise中打开.
  • 单击测试 - >分析代码覆盖率 - >所有测试.
  • 观察"代码覆盖率结果"窗口报告1块"未覆盖"(ExampleDto.Value的getter)

是否可以在Visual Studio 2015中配置内置代码覆盖率工具以忽略Visual Studio 2013之类的自动属性?

Iai*_*way 9

作为解决方法,您可以将以下内容添加到.runsettings文件中: -

<RunSettings>
  <DataCollectionRunSettings>
    <DataCollector ...>
      <Configuration>
        <CodeCoverage>
          <Functions>
            <Exclude>
              <Function>.*get_.*</Function>
              <Function>.*set_.*</Function>
            </Exclude>
          ...
Run Code Online (Sandbox Code Playgroud)

这不是一个很好的解决方法,但只要你没有使用名称中带有"get_"或"set_"的任何函数,它就可以获得你需要的行为.