ExcludeFromCodeCoverage排除自动生成的代码

Ada*_*dam 6 c# unit-testing ncover auto-generate

有没有办法将自动生成的类标记为ExcludeFromCodeCoverage.我在其他领域使用该属性并且效果很好.但是如果你打开自动生成的man的代码并将类标记为ExcludeFromCodeCoverage,那么一旦你重新生成该类,它就会被覆盖.

我可以在dbml后面的代码中创建部分类,并将该属性应用于它,然而,它可以用于很多部分类.

Ser*_*kiy 6

您可以使用PostSharp或其他 AOP 框架来创建将应用于ExcludeFromCodeCoverageAttribute指定类型或命名空间的方面:

[Serializable]
[AttributeUsage(AttributeTargets.Assembly)]
[MulticastAttributeUsage(MulticastTargets.Class | MulticastTargets.Struct)]
[ProvideAspectRole(StandardRoles.PerformanceInstrumentation)]
public sealed class DisableCoverageAttribute : TypeLevelAspect, IAspectProvider
{
    public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
    {
        Type disabledType = (Type)targetElement;

        var introducedExclusion = new CustomAttributeIntroductionAspect(
              new ObjectConstruction(typeof (ExcludeFromCodeCoverageAttribute)));

        return new[] {new AspectInstance(disabledType, introducedExclusion)};
    }
}
Run Code Online (Sandbox Code Playgroud)

然后只需将此方面应用于程序集并提供要排除的命名空间。在编译期间 PostSharp 将添加ExcludeFromCodeCoverageAttributeMy.AutogeneratedCode命名空间中的所有类:

[assembly: DisableCoverage(AttributeTargetTypes="My.AutogeneratedCode.*")]
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到示例代码和说明。