2009-08-17 20 views
15

में कवरेज विश्लेषण से कोड को छोड़ने के लिए विशेषता का उपयोग करें मेरे पास कुछ वर्ग हैं, एक कारण या किसी अन्य कारण से, इकाई परीक्षण नहीं किया जा सकता है या नहीं। मैं इन कक्षाओं को अपने कवरेज मीट्रिक से बाहर करना चाहता हूं ताकि मैं उन वर्गों पर कवरेज के लिए बेहतर महसूस कर सकूं जिनकी मैं वास्तव में परवाह करता हूं। इस तथ्य के बाद मुझे परिणामों को बाहर करना होगा। मैं जो करना चाहता हूं वह उन वर्गों को चिह्नित करने के लिए एक विशेषता का उपयोग करना है ताकि उन्हें शामिल करने के लिए शामिल न किया जा सके। क्या किसी श्रेणी के साथ कक्षा को सजाने का कोई तरीका है जो स्वचालित रूप से इसे कवरेज विश्लेषण से बाहर कर देगा? या तो वीएस कवरेज विश्लेषण या एनकॉवर काम करेगा।विजुअल स्टूडियो

एफडब्ल्यूआईडब्ल्यू, ये कक्षाएं हैं जिन्हें मैं स्वयं निरीक्षण कर सकता हूं कि कोड सही है। अधिकांशतः वे ढांचे के वर्गों को नकल करने में सक्षम होने के लिए पेश किए गए मौजूदा ढांचे वर्गों के आसपास रैपर कक्षाएं हैं। चूंकि रैपर का मज़ाक उड़ाया जाता है, इसलिए उन्हें परीक्षण नहीं किया जाता है। यह ठीक है क्योंकि वे जो भी करते हैं वह फ्रेमवर्क क्लास 'विधियों को लपेटता है जिनकी मुझे परवाह है।

+0

क्या समस्या है कि आप इनविडुअल विधियों, पर कवरेज डेटा नहीं प्राप्त कर सकते हैं, इसलिए आप उन विधियों पर कवरेज डेटा को हटाना चाहते हैं जिन पर आप पूरी तरह से अधिक उचित उपाय प्राप्त करने की परवाह नहीं करते हैं? –

+0

हां। ऐसी कुछ विधियां हैं जिन्हें आसानी से परीक्षण नहीं किया जा सकता है या नहीं किया जा सकता है - उदाहरण के लिए ढांचे वर्गों के चारों ओर इकाई परीक्षण को सक्षम करने के लिए बनाई गई रैपर कक्षाएं। मैं उन कक्षाओं के आंकड़ों को गड़बड़ नहीं करना चाहूंगा जिनकी मुझे परवाह है। – tvanfosson

उत्तर

22

वीएस -2010 से शुरू होने पर हमारे पास ExcludeFromCodeCoverageAttribute है। टिप्पणीकारों ने एनसीओवर के साथ-साथ डॉटकॉवर + एनयूनीट में काम करने के लिए यह उल्लेख किया है। उदाहरण उपयोग:

[ExcludeFromCodeCoverage] 
public class myUntestableClass 
{ } 

यह भी देखें link। वे कमांड लाइन उपकरण के रूप में VSInstr का उपयोग करने का सुझाव देते हैं, इसमें/EXCLUDE विकल्प हैं (यह आसान नहीं है)।

+0

यह एनसीओवर के साथ-साथ वीएस -2010 में भी काम करता है। – tvanfosson

+0

यह डॉटकॉवर + एनयूनीट (वीएस2012) के साथ भी काम करता है। – Jeroen

6

मैं पर निदान के एक जोड़े का श्रेय DebuggerNonUserCodeAttribute और DebuggerHiddenAttribute इंगित करता है कि इन विशेषताओं का उपयोग इन उसके परिणामों से बाहर छोड़ने के लिए वी.एस. में कवरेज विश्लेषक का कारण होगा some information पाया है। मैंने इसे DebuggerNonUserCodeAttribute के साथ आजमाया है और ऐसा लगता है कि यह काम करता है। मैं शायद उन वर्गों के लिए इसके साथ रह सकता हूं जिनके बारे में मैं सोच रहा हूं, हालांकि मुझे इन वर्गों में कदम उठाने में सक्षम न होने का दुष्प्रभाव पसंद नहीं है। यह रैपर वर्गों के लिए कोई समस्या नहीं होनी चाहिए, लेकिन यह कक्षाओं के साथ ऐसा हो सकता है जो परीक्षण करने के लिए स्वाभाविक रूप से कठिन हैं और मुझे डीबगर पहुंच की आवश्यकता है।

मैं अभी भी विकल्पों की तलाश में हूं, हालांकि।

+0

यह वही है जो मैं खोज रहा था। पीछा करने के लिए धन्यवाद! –

5

एनसीओवर के साथ आप एक विशेषता बना सकते हैं और फिर उस विशेषता को अनदेखा करने के लिए एनसीओवर को बता सकते हैं।

हमारी परियोजनाओं में, हम इस विशेषता को परिभाषित किया है (कोई नाम स्थान है, इसलिए इसे इस्तेमाल करना आसान है):

public class CoverageExcludeAttribute : Attribute { } 

हम NAnt का उपयोग करें, तो हम एक लक्ष्य है कि इस तरह दिखता है:

<target name="unittests" description="run nunit tests" >   
    <ncover 
     .... 
     excludeAttributes="CoverageExcludeAttribute" 
    /> 
</target> 

NCover FAQ में प्रश्न 9 इस विधि का वर्णन करता है। हम इस पर हमारे समाधान आधारित हैं।

वैकल्पिक रूप से, आप अंतिम रिपोर्ट से नेमस्पेस और असेंबली को बाहर करने के लिए एनसीओवरएक्सप्लोरर की सुविधा को बहिष्कृत कर सकते हैं। यह केवल रिपोर्ट से डेटा हटा देता है, लेकिन अंतिम परिणाम वही है।

हम दोनों तकनीकों का उपयोग करते हैं।

+0

धन्यवाद। यही वही है जो मैं ढूंढ रहा था। मैं ज्यादातर टेस्टड्रिवेन.Net के संयोजन के साथ एनकॉवर का उपयोग करता हूं जो ऐसा लगता है कि यह बॉक्स के बाहर CoverageExcludeAttribute को सक्षम बनाता है। – tvanfosson

+0

नवीनतम संस्करण ExcludeFromCodeCoverage विशेषता के साथ काम करता है, इसलिए मैंने इसका उपयोग करने के लिए स्विच किया है। – tvanfosson