【发布时间】:2015-09-01 10:35:01
【问题描述】:
我刚刚将一堆项目升级到 VS2015/C#6。
现在 MSTest 的代码覆盖率分析报告说单元测试未涵盖某些自动属性。在 Visual Studio 2013 中并非如此,我怀疑这可能与 C#6 中的新自动属性功能有关。
处理由此产生的所有误报反而违背了代码覆盖率工具的目的,因为它实际上无法识别缺乏测试覆盖率的实际代码。我们不想为我们所有的 DTO 编写单元测试,我真的不想在项目中用ExcludeFromCodeCoverage 注释每个自动属性。
我在https://github.com/iaingalloway/VisualStudioCodeCoverageIssue创建了一个工作MCVE
- 在 Visual Studio 2013 Premium 或 Ultimate 中打开
VisualStudio2013.sln。 - 点击测试 -> 分析代码覆盖率 -> 所有测试。
- 观察“代码覆盖结果”窗口报告 0 个块“未覆盖”。
- 在 Visual Studio 2015 Enterprise 中打开
VisualStudio2015.sln。 - 点击测试 -> 分析代码覆盖率 -> 所有测试。
- 观察“代码覆盖结果”窗口报告 1 个“未覆盖”块(ExampleDto.Value 的 getter)
是否可以将 Visual Studio 2015 中的内置代码覆盖工具配置为像 Visual Studio 2013 那样忽略自动属性?
【问题讨论】:
-
这种行为似乎是 Visual Studio 2015 中的一个错误。目前除了使用
[ExcludeFromCodeCoverage]之外没有其他解决方法。您可以通过以下方式监控工单的进度:- connect.microsoft.com/VisualStudio/Feedback/Details/1742106 -
问题是你有一个类的属性没有被任何单元测试代码触及。它们是未使用的代码。你应该问的问题是为什么你有这些属性?如果他们有一个好的答案,请务必使用
[Exclude...]属性,但要立即使用// reason why each can be excluded。
标签: c# visual-studio-2015 code-coverage mstest c#-6.0