2012-06-25 18 views
6

C'è un modo per contrassegnare una classe generata automaticamente come ExcludeFromCodeCoverage. Sto usando quell'attributo in altre aree e funziona alla grande. Ma se apri il codice del ragazzo generato automaticamente e contrassegni le classi come ExcludeFromCodeCoverage, una volta rigenerata la classe verrà sovrascritta.ExcludeFromCodeCoverage Escludi codice generato automaticamente

Posso creare classi parziali nel codice dietro il dbml e applicare tale attributo ad esso e funziona, tuttavia, ciò renderebbe molte classi parziali.

+0

È possibile rendere la classe generata automaticamente con 'partial' (ad esempio, alterando il generatore in qualche modo)? –

risposta

4

È possibile utilizzare PostSharp o altro quadro AOP per creare aspetto che si applicherà ExcludeFromCodeCoverageAttribute a tipi o spazi dei nomi specificati:

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

Poi basta applicare questo aspetto al montaggio e fornire spazio dei nomi che si desidera escludere. Durante la compilazione PostSharp aggiungerà ExcludeFromCodeCoverageAttribute a tutte le classi in My.AutogeneratedCode namespace:

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

codice di esempio e spiegazioni potete trovare here.