2012-06-25 14 views
6

Gibt es eine Möglichkeit, eine automatisch generierte Klasse als ExcludeFromCodeCoverage zu markieren. Ich verwende dieses Attribut in anderen Bereichen und funktioniert großartig. Wenn Sie jedoch den Code des automatisch generierten Typs öffnen und die Klassen als ExcludeFromCodeCoverage markieren, wird die Klasse nach dem erneuten Generieren überschrieben.ExcludeFromCodeCoverage Automatisch generierten Code ausschließen

Ich kann partielle Klassen im Code hinter dem dbml erstellen und dieses Attribut auf es anwenden, und es funktioniert jedoch, die für viele partielle Klassen machen würde.

+0

Können Sie die automatisch generierte Klasse mit 'partially' (wie zum Beispiel der Änderung des Generators) kommen lassen? –

Antwort

4

Sie können PostSharp oder andere AOP Framework verwenden Aspekt zu schaffen, die ExcludeFromCodeCoverageAttribute auf bestimmte Typen oder Namensräume gelten:

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

Dann bewerben Sie gerade diesen Aspekt der Montage und bieten Namespace, die Sie ausschließen möchten. Während der Kompilierung wird Postsharp ExcludeFromCodeCoverageAttribute in My.AutogeneratedCode Namespace für alle Klassen hinzufügen:

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

Beispielcode und Erläuterungen Sie here finden.