2012-10-06 12 views
18

मैं एक्लिप्स और एक्लेम्मा का उपयोग करके जावा में अपना कोड कवरेज प्राप्त करने का प्रयास कर रहा हूं।एक्लेम्मा के साथ जावा में कोड कवरेज अपवाद विधियों की अपेक्षा स्कैन नहीं कर रहा है

मेरे परीक्षण JUnit 4 का उपयोग कर रहे हैं और मैं कुछ परीक्षण इस तरह लग रही है:

@Test(expected = IllegalArgumentException.class) 
    public void createTime_withInvalidMinuteUnder0_throws(){ 
    //Arrange 
    ... 
    //Act 
    Something triggering IllegalArgumentException Here  
} 

और EclEmma का कहना है कि परीक्षण में विफल रहता है एक IllegalArgumentException फेंक दिया जा रहा है क्योंकि वहाँ। तो यह मेरे कोड कवरेज सूचक को छोड़ देता है भले ही इसे कुछ फेंक दिया जाए। क्या यह देखने का कोई विकल्प है कि जुनीट ने अपवाद टैग की उम्मीद की है?

संपादित करें: मुझे पता चला है कि यदि आप परीक्षण की घोषणा में फेंक जोड़ते हैं, तो यह काम करता है!

उत्तर

21

नहीं, EclEmma को expected खंड को नोटिस करने का कोई तरीका नहीं है। वे इस तथ्य को here स्वीकार करते हैं।

क्यों दिखाया उम्मीद अपवादों के साथ JUnit4 परीक्षण मामलों के रूप में शामिल नहीं हैं?

अपेक्षित अपवादों के साथ JUnit4 परीक्षण मामलों को कवर नहीं किया गया है, भले ही उन्हें निष्पादित किया गया हो। इसका कारण यह है कि अंतर्निहित जाकोओ कोड कवरेज लाइब्रेरी केवल कुछ जांच निष्पादित होने पर निष्पादित कोड को मानती है। सफल परीक्षण मामलों के लिए @Test{expected=...} के साथ चिह्नित यह मामला नहीं है।

व्यक्तिगत रूप से, मैं इसके बारे में बहुत ज्यादा चिंता नहीं करता। परीक्षण मामलों का कवरेज कम से कम दिलचस्प बात है EclEmma आपको बता सकता है; मैं हमेशा उन मीट्रिक को पूरी तरह अनदेखा करता हूं और अपने उत्पादन कोड के कवरेज पर ध्यान केंद्रित करता हूं।

+4

अधिक दिलचस्प बातें EclEmma मुझे बता सकते हैं क्या हैं? – Pacane

+1

मैं आपके परीक्षण कोड के बजाय आपके उत्पादन कोड के लिए कोड कवरेज मीट्रिक का जिक्र कर रहा था। या मैंने आपके मूल प्रश्न को गलत समझा? –

+0

ओह, मेरे बुरे, मैंने आपके उत्तर में आपके बयान को गलत समझा। – Pacane

0

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

https://github.com/jacoco/jacoco/pull/261

पुल अनुरोध पर टिप्पणी करने या चर्चा मैं JaCoCo मेलिंग सूची पर शुरू कर दिया में भाग लेने के लिए स्वतंत्र महसूस।

4

अभी तक टिप्पणी नहीं कर सकता है, लेकिन मैं स्वीकार्य उत्तर के संबंध में इंगित करना चाहता हूं कि आपके परीक्षण कोड के कवरेज पर ध्यान देने का एक बहुत अच्छा कारण है।

जुनीट के साथ सम्मेलन नामकरण परीक्षण विधि को खराब करने या अपने जुनीट संस्करण के आधार पर @ टेस्ट एनोटेशन को भूलने के लिए यह आसान तरीका है। ऐसा करते हैं, और आप आसानी से सोच अपने ठोस हरी पट्टी इसका मतलब है कि अच्छा परीक्षण तुम सिर्फ पारित कर दिया जोड़ा, जब वास्तव में यह कभी नहीं भागा में मूर्ख बनाया जा सकता है। कवरेज रंग यह बहुत प्रमुख रूप से दिखाएगा। बेशक, चूंकि यह धागा बताता है, अपवादों को फेंकने वाले आपके कुछ परीक्षण ऐसा लग सकते हैं कि उन्होंने ऐसा नहीं किया था जब उन्होंने नहीं किया था।