排除代码覆盖率 排除自动生成的代码



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

我可以在 dbml 的代码后面创建分部类并将该属性应用于它,但是它可以工作,这将产生很多分部类。

您可以使用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)};
    }
}

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

[assembly: DisableCoverage(AttributeTargetTypes="My.AutogeneratedCode.*")]

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

最新更新