2012-03-15 14 views
11

के साथ परीक्षणों के साथ कोड कवरेज नहीं करता है, मैं ग्रहण के साथ एक्लेम्मा का उपयोग कर रहा हूं ताकि मुझे यह पता चल सके कि मेरी परियोजना में कोड परीक्षण कहां गायब है, लेकिन @RunWith(PowerMockRunner.class) के साथ सभी परीक्षणों को नहीं कहा जाता है और इस प्रकार टेस्ट नहीं हुआ।क्यों EclEmma @RunWith (PowerMockRunner.class)

मैं मॉकिटो के साथ जुनीट 4.8.1 का उपयोग कर रहा हूं।

यह क्या हो सकता है?

+1

क्या आप मॉकिटो, पावरमैक और एक्लेम्मा की कविता जैसे अधिक विवरण दे सकते हैं? – Brice

+0

अरे, मैं eclEmma के संस्करण 2.1.0 का उपयोग कर रहा हूं, यह उस संस्करण में एक बग है, eclEmma 1.5.x में यह परीक्षण कवरेज ठीक दिखाता है। – LottaLava

+0

ठीक है, ऐसा लगता है कि _EclEmma_ अब संस्करण 2.x के बाद _Emma_ का उपयोग नहीं करता है। वे अपने स्वयं के कवरेज टूल का उपयोग कर रहे हैं जिसे जाकोओ कहा जाता है। जैसा कि मैं पावरमैक संस्करण का उपयोग नहीं कर रहा हूं, आपको PowerMock 1.4.11 का प्रयास करना चाहिए जिसमें जैकोको से संबंधित कुछ फ़िक्स शामिल हैं: http://powermock.googlecode.com/svn/trunk/changelog.txt – Brice

उत्तर

0

AFAIK eclEmma, ​​साथ ही कई अन्य कवरेज सिस्टम, कवरेज निर्देश जोड़ने के लिए अपनी .class फ़ाइलों को संशोधित करें। इनमें से अधिकतर उपकरण "संकलन समय" पर करते हैं, रन समय पर नहीं।

PowerMock बजाय, साथ ही AspectJ LTW और कई अन्य प्रणाली, एक ही बाईटकोड हेरफेर लेकिन "चलाने के समय" के रूप में:

PowerMock है कि और अधिक शक्तिशाली क्षमताओं के साथ इस तरह के EasyMock के रूप में अन्य नकली पुस्तकालयों का विस्तार एक रूपरेखा है । पावरमोक एक कस्टम क्लासलोडर और बाइटकोड मैनिपुलेशन का उपयोग करता है ताकि स्थिर तरीकों, रचनाकारों, अंतिम कक्षाओं और विधियों, निजी तरीकों, स्थैतिक प्रारंभकर्ताओं को हटाने और अन्य के मॉकिंग को सक्षम बनाया जा सके।

मैं इसे किसी भी तरह संशोधन कवरेज उपकरण के द्वारा पहले किया भ्रष्ट जब .class फ़ाइलों के क्रम संशोधन हो AspectJ LTW, कारण के साथ संयोजन में दोनों eclEmma (विभिन्न संस्करणों) और Cobertura के साथ एक समान समस्या है,।

मुझे अभी तक कोई समाधान नहीं मिला है, लेकिन कम से कम लक्षण मिला है।

सही समाधान PowerMock उपकरण को डीबग करना होगा और यह पता लगाना होगा कि यह कवरेज टूल कहां और कैसे टूटता है। यह कवरेज उपकरण को तोड़ने के लिए एक परीक्षण उपकरण के लिए काफी एक समस्या है, क्योंकि दो अक्सर एक साथ इस्तेमाल कर रहे हैं :)

3

यह एक ज्ञात बग दोनों दलों के लिए सूचना:

http://code.google.com/p/powermock/issues/detail?id=402 https://github.com/jacoco/eclemma/issues/15#issuecomment-9565210

eCoberture हालांकि सही कवरेज प्रदान करने के लिए लगता है। एकमात्र समस्या, ऐसा लगता है कि अब और बनाए रखा नहीं जा रहा है, और आप हाइलाइट्स इम ग्रहण जूनो को हटा नहीं सकते हैं।

1

यहाँ आप उदाहरण है कि काम करता है पा सकते हैं और आप रिपोर्ट jacoco

0

हम उपहास करने के लिए एक स्थिर वर्ग को देखने के लिए इस समस्या को https://github.com/Godin/jacoco-experiments

उपयोग mvn clean package सुलझाने में मदद कर सकते हैं। स्थिर वर्गों का मज़ाक उड़ाते हुए, एक्लेम्मा कोड कवरेज प्लगइन ग्रहण में काम नहीं कर रहा है। तो है, इसलिए रखा @RunWith (JUnit4.class) (@RunWith के बजाय (PowerMockRunner.class)) वर्ग और रखा निम्नलिखित लाइनों के अंदर कक्षा से पहले

static { 
PowerMockAgent.initializeIfNeeded(); 
} 

@Rule 
public PowerMockRule rule = new PowerMockRule(); 

वर्ग संकलित और परीक्षण वर्ग भाग गया हम क्या किया। कोड कवरेज कक्षा के लिए ठीक काम कर रहा है। यह परिवर्तन केवल किसी समस्या के साथ ग्रहण आईडीई में eclEmma प्लगइन चलाने के लिए है।

परीक्षण के मामलों को लिखने के बाद, हमने कोड को वापस सामान्य पर वापस कर दिया। @RunWith (JUnit4.class) के बजाय @RunWith (PowerMockRunner.class) रखा और स्थिर कोड और पावरमॉक्रू लाइनों के ऊपर टिप्पणी की।

संबंधित मुद्दे