tva*_*son 18 attributes code-coverage ncover visual-studio
我有一些课程,由于某种原因,不能或不需要进行单元测试.我想从我的覆盖率指标中排除这些类,以便我能更好地了解我真正关心的类的覆盖范围.现在我必须在事后排除结果.我想要做的是使用一个属性将这些类标记为排除,以便它们不包括在内. 有没有办法用一个属性来装饰一个类,它会自动将它从覆盖率分析中排除? VS覆盖率分析或nCover都可以使用.
FWIW,这些是我可以通过检查代码是正确的自我保证的类.大多数情况下,它们是围绕现有框架类的包装类,我已经介绍过这些类,以便能够模拟框架类.由于包装器被嘲笑,所以它们没有经过测试.这没关系,因为他们所做的只是包装我关心的框架类的方法.
Shr*_*ike 27
从VS2010开始,我们有ExcludeFromCodeCoverageAttribute.评论者注意到这在NCover和DotCover + NUnit中都有效.用法示例:
[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }
Run Code Online (Sandbox Code Playgroud)
另见此链接.他们建议使用VSInstr作为命令行工具,它有/ EXCLUDE选项(它不是很方便).
我发现了一些诊断属性DebuggerNonUserCodeAttribute和DebuggerHiddenAttribute的一些信息,这些属性表明使用这些属性会导致VS中的coverage分析器将这些属性从结果中删除.我已经使用DebuggerNonUserCodeAttribute尝试了它,它似乎工作.对于我正在考虑的大多数课程,我可以忍受这个,尽管我不喜欢不能进入这些课程的副作用.对于包装类来说这应该不是问题,但是对于本身很难测试的类而言我可能最终会这样,我需要调试器访问.
不过,我仍然在寻找其他选择.
小智 5
使用NCover,您可以创建一个属性,然后告诉NCover忽略该属性.
在我们的项目中,我们已经定义了这个属性(没有命名空间,因此很容易使用):
public class CoverageExcludeAttribute : Attribute { }
Run Code Online (Sandbox Code Playgroud)
我们使用NAnt,所以我们有一个如下所示的目标:
<target name="unittests" description="run nunit tests" >
<ncover
....
excludeAttributes="CoverageExcludeAttribute"
/>
</target>
Run Code Online (Sandbox Code Playgroud)
NCover FAQ中的问题9 描述了这种方法.我们的解决方案基于此.
或者,您可以使用NCoverExplorer的exclude功能从最终报表中排除名称空间和程序集.这只是从报告中删除数据,但最终结果是相同的.
我们使用这两种技术.
| 归档时间: |
|
| 查看次数: |
10569 次 |
| 最近记录: |