2012-06-25 20 views
6

बहिष्कृत करें एक ऑटो-जेनरेटेड क्लास को बहिष्कृत करने के लिए ExconeFromCodeCoverage के रूप में चिह्नित करने का कोई तरीका है। मैं अन्य क्षेत्रों में उस विशेषता का उपयोग कर रहा हूं और महान काम करता हूं। लेकिन यदि आप स्वत: जेनरेट किए गए लड़के के कोड को खोलते हैं और कक्षाओं को बहिष्कृत करते हैं तो एक बार फिर से उत्पन्न करने के बाद, उस वर्ग को फिर से उत्पन्न करने के बाद इसे लिखा जाएगा।बहिष्कृत करेंप्रोमकोड कवर ऑटो-जेनरेटेड कोड

मैं डीबीएमएल के पीछे कोड में आंशिक कक्षाएं बना सकता हूं और उस विशेषता को लागू कर सकता हूं और यह काम करता है, हालांकि, यह बहुत से आंशिक वर्गों के लिए तैयार होगा।

+0

क्या आप ऑटो-जेनरेटेड क्लास को 'आंशिक' (जैसे, जनरेटर को किसी तरह से बदलना) के साथ आ सकते हैं? –

उत्तर

4

आप PostSharp या अन्य AOP ढांचे का उपयोग पहलू है जो निर्दिष्ट प्रकार या नामस्थान को ExcludeFromCodeCoverageAttribute लागू होगी बनाने के लिए कर सकते हैं:

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

तो बस विधानसभा के लिए इस पहलू लागू करते हैं और नाम स्थान जो आप छोड़ना चाहते हैं प्रदान करते हैं। संकलन के दौरान PostSharp My.AutogeneratedCode नाम स्थान में सभी वर्गों के लिए ExcludeFromCodeCoverageAttribute जोड़ देगा:

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

नमूना कोड और स्पष्टीकरण आप here पा सकते हैं।