ExcludeFromCodeCoverage Exclude Auto-Generated Code
Asked Answered
A

1

7

Is there a way to mark an auto-generated class as ExcludeFromCodeCoverage. I am using that attribute in other areas and works great. But if you open the code of the auto-generated guy and mark the classes as ExcludeFromCodeCoverage, once you re-generate that class itll be over written.

I can create partial classes in the code behind of the dbml and apply that attribute to it and it works, however, that would make for a lot of partial classes.

Appleton answered 25/6, 2012 at 18:1 Comment(1)
Can you make auto-generated class come with partial (like, altering generator in some way)?Indifferentism
D
6

You can use PostSharp or other AOP framework to create aspect which will apply ExcludeFromCodeCoverageAttribute to specified types or namespaces:

[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)};
    }
}

Then just apply this aspect to assembly and provide namespace which you want to exclude. During compilation PostSharp will add ExcludeFromCodeCoverageAttribute to all classes in My.AutogeneratedCode namespace:

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

Sample code and explanations you can find here.

Dibbrun answered 26/6, 2012 at 8:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.