2012-07-03 22 views
6

मैं अपने एंड्रॉइड ऐप (उदाहरण के लिए ब्लूटूथ सॉकेट) का परीक्षण करने में उपयोग की जाने वाली कुछ कक्षाओं को मॉक करने के लिए पावरमैक का उपयोग करने की कोशिश कर रहा हूं।Android पर PowerMock के साथ VerifyError

मैंने पावरमैक के Google कोड पेज पर सभी निर्भरताओं के साथ ज़िप फ़ाइल डाउनलोड की है और उन्हें अपने एंड्रॉइड टेस्ट प्रोजेक्ट (बिल्ड पथ सहित) में जोड़ा है।

लेकिन जब मैं इस तरह PowerMock इस्तेमाल करने की कोशिश:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(NetworkUtil.class) 
public class TestSendAck extends TestCase{ 

    @Test 
    public void testGenerateURL() { 
     PowerMock.mockStatic(NetworkUtil.class); 

     EasyMock.expect(NetworkUtil.getLocalHostname()).andReturn("triumph"); 

     PowerMock.replayAll(); 
     PowerMock.verifyAll(); 
    } 
} 

मैं निम्नलिखित स्टैक ट्रेस: ​​

java.lang.ExceptionInInitializerError 
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:249) 
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:159) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:59) 
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212) 
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) 
at org.powermock.api.easymock.PowerMock.mockStatic(PowerMock.java:287) 
at se.metrima.mafield.test.TestSendAck.testGenerateURL(TestSendAck.java:19) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 
Caused by: java.lang.VerifyError: net.sf.cglib.core.ReflectUtils 
at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:166) 
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
... 19 more 

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

मैं इसे कैसे हल कर सकता हूं? मैं यूनिट परीक्षण के लिए बहुत नया हूं इसलिए मैं अभी तक सभी अवधारणाओं को समझ नहीं पा रहा हूं।

+0

क्या आपने इसे हल किया है? –

उत्तर

2

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

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