我刚刚将一堆项目升级到VS2015 / C#6 .
现在,MSTest的代码覆盖率分析报告单元测试未涵盖某些自动属性 . 在Visual Studio 2013中并非如此,我怀疑它可能与C#6中的新autoproperty功能有关 .
处理所产生的所有误报都会使代码覆盖率工具的目的失败,因为它几乎不可能识别缺乏测试覆盖率的实际代码 . 我们真的不需要通过项目使用 ExcludeFromCodeCoverage
注释每个自动属性 .
我在https://github.com/iaingalloway/VisualStudioCodeCoverageIssue创建了一个有效的MCVE
-
在Visual Studio 2013 Premium或Ultimate中打开
VisualStudio2013.sln
. -
单击测试 - >分析代码覆盖率 - >所有测试 .
-
观察"Code Coverage Results"窗口报告0块"Not Covered" .
-
在Visual Studio 2015 Enterprise中打开
VisualStudio2015.sln
. -
单击测试 - >分析代码覆盖率 - >所有测试 .
-
观察"Code Coverage Results"窗口报告1 Block "Not Covered"(ExampleDto.Value的getter)
Is it possible to configure the built-in Code Coverage tool in Visual Studio 2015 to ignore auto-properties like Visual Studio 2013 does?
3 回答
作为解决方法,您可以将以下内容添加到.runsettings文件中: -
这不是一个很好的解决方法,但只要你没有使用名称中带有“get_”或“set_”的任何函数,它就可以获得你需要的行为 .
我不喜欢过滤所有get / set方法,特别是因为我有时会编写需要测试的get和set逻辑 . 对我来说,对于相对简单模型的基本覆盖,下面的一对xUnit测试运行良好:
我认为
[ExcludeFromCodeCoverage]
是你唯一的选择 . 这只是你要做的一次性事情 . 我个人来说,DO在属性getter / setter上编写单元测试,尤其是在WPF中,我希望确保发生属性更改通知 .