Domanda

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.

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top