2012-06-25 20 views
6

¿Existe alguna manera de marcar una clase generada automáticamente como ExcludeFromCodeCoverage? Estoy usando ese atributo en otras áreas y funciona muy bien. Pero si abre el código del tipo autogenerado y marca las clases como ExcludeFromCodeCoverage, una vez que vuelva a generar esa clase, se terminará.ExcludeFromCodeCoverage Excluir código autogenerado

Puedo crear clases parciales en el código detrás del dbml y aplicarle ese atributo, pero funciona, sin embargo, para muchas clases parciales.

+0

¿Puedes hacer que la clase generada automáticamente venga con 'partial' (como, alterar el generador de alguna manera)? –

Respuesta

4

Puede utilizar PostSharp u otro marco de AOP para crear aspecto que se aplicará a ExcludeFromCodeCoverageAttribute tipos o espacios de nombres especificados:

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

A continuación, sólo se aplican a este aspecto montaje y proporcionan espacio de nombres que desea excluir. Durante la compilación PostSharp añadirá ExcludeFromCodeCoverageAttribute a todas las clases en el espacio de nombres My.AutogeneratedCode:

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

Código de la muestra y las explicaciones se pueden encontrar here.

Cuestiones relacionadas