2012-06-25 31 views
6

Có cách nào để đánh dấu một lớp được tạo tự động là ExcludeFromCodeCoverage không. Tôi đang sử dụng thuộc tính đó trong các lĩnh vực khác và hoạt động tốt. Nhưng nếu bạn mở mã của anh chàng được tạo tự động và đánh dấu các lớp là ExcludeFromCodeCoverage, khi bạn tạo lại lớp đó, nó sẽ được ghi đè lên.ExcludeFromCodeCoverage Exclude Code được tạo tự động

Tôi có thể tạo các lớp một phần trong mã phía sau của dbml và áp dụng thuộc tính đó cho nó và nó hoạt động, tuy nhiên, điều đó sẽ làm cho nhiều lớp học một phần.

+0

Bạn có thể tạo lớp được tạo tự động đi kèm với 'một phần' (giống như, thay đổi trình tạo theo cách nào đó) không? –

Trả lời

4

Bạn có thể sử dụng PostSharp hoặc khung AOP khác để tạo ra khía cạnh đó sẽ được áp dụng với các loại ExcludeFromCodeCoverageAttribute hoặc không gian tên được chỉ định:

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

Sau đó chỉ cần áp dụng khía cạnh này để lắp ráp và cung cấp không gian tên mà bạn muốn loại trừ. Trong biên soạn PostSharp sẽ thêm ExcludeFromCodeCoverageAttribute đến mọi tầng lớp trong My.AutogeneratedCode namespace:

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

Mẫu mã và giải thích bạn có thể tìm here.

Các vấn đề liên quan