在Visual Studio中使用属性忽略覆盖率分析中的代码

vsaztqbk  于 2022-12-19  发布在  其他
关注(0)|答案(4)|浏览(189)

我有些课,出于这样或那样的原因,无法或不需要进行单元测试。我希望从覆盖率度量中排除这些类,以便更好地了解我实际关心的类的覆盖率。现在,我必须排除事后结果。我希望做的是使用属性将这些类标记为已排除,以便它们不被“**有没有办法用一个属性来修饰一个类,这个属性会自动将它从覆盖率分析中排除?**VS覆盖率分析或nCover都可以。
FWIW,这些类我可以通过检查来保证代码是正确的。大多数情况下,它们是围绕现有框架类的 Package 类,我引入这些类是为了能够模拟框架类。由于 Package 类被模拟出来,所以它们不会被测试。这没关系,因为它们所做的一切就是 Package 我所关心的框架类的方法。

ubby3x7f

ubby3x7f1#

从VS2010开始,我们有ExcludeFromCodeCoverageAttribute。评论者注意到这可以在NCover和DotCover + NUnit中使用。示例用法:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

他们建议使用VSInstr作为命令行工具,它有/EXCLUDE选项(不方便)。

z18hc3ub

z18hc3ub2#

我在几个Diagnostics属性DebuggerNonUserCodeAttributeDebuggerHiddenAttribute上发现了some information,这表明使用这些属性将导致VS中的覆盖率分析器将这些属性排除在其结果之外。我已经尝试过使用DebuggerNonUserCodeAttribute,它似乎工作正常。对于我正在考虑的大多数类,我可能可以接受这一点。虽然我不喜欢不能单步执行这些类的副作用,这对 Package 类来说应该不是问题,但对于本质上很难测试的类来说可能会是这样,我需要调试器访问。
不过,我还在寻找替代品。

y1aodyip

y1aodyip3#

使用NCover,您可以创建一个属性,然后告诉NCover忽略该属性。
在我们的项目中,我们定义了这个属性(没有命名空间,所以很容易使用):

public class CoverageExcludeAttribute : Attribute { }

我们使用NAnt,所以我们有一个如下所示的目标:

<target name="unittests" description="run nunit tests" >        
    <ncover
        ....
        excludeAttributes="CoverageExcludeAttribute"
    />
</target>

NCover FAQ中的问题9描述了这种方法,我们的解决方案就是基于此。
或者,您可以使用NCoverExplorer的exclude功能从最终报告中排除命名空间和程序集。这只是从报告中删除数据,但最终结果是相同的。
我们使用两种技术。

nafvub8i

nafvub8i4#

这对我有用!👍
在**.csproj**中使用:声纳键

<ItemGroup>
    <SonarQubeSetting Include="sonar.issue.ignore.allfile">
        <Value>ExcludeFromCodeCoverage</Value>
    </SonarQubeSetting>
</ItemGroup>

<ItemGroup>
    <SonarQubeSetting Include="sonar.coverage.exclusions">
        <Value>**/FileClassToExclude.cs</Value>
    </SonarQubeSetting>
</ItemGroup>

然后通过ExcludeFromCodeCoverage from microsoft在类文件**.cs**中使用

[ExcludeFromCodeCoverage]
public class ExcludeMeFromSonarCoverage
{
    public ExcludeMeFromSonarCoverage()
    {
    }
}

相关问题