【问题标题】:ExcludeFromCodeCoverage Exclude Auto-Generated CodeExcludeFromCodeCoverage 排除自动生成的代码
【发布时间】:2012-06-25 18:01:02
【问题描述】:

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

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

【问题讨论】:

  • 你能让自动生成的类与partial 一起使用吗(比如,以某种方式改变生成器)?

标签: c# unit-testing auto-generate ncover


【解决方案1】:

您可以使用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.*")]

你可以找到here的示例代码和解释。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2012-11-22
    相关资源
    最近更新 更多