मैं एंड्रॉइड रोबोलेक्ट्रिक परीक्षणों में कुछ स्थिर तरीकों का नकल करने के लिए PowerMockito का उपयोग करने की कोशिश कर रहा हूं। मैं जुनीट 4.8.2, रोबोलेक्ट्रिक 2.2, मॉकिटो 1.9.5, और पावरमैक 1.9.5 का उपयोग कर रहा हूं here। जैसा कि मुझे RoboElectricTestRunner का उपयोग करना है, मैं बूटस्ट्रैप PowerMock में PowerMockRule का उपयोग करने का प्रयास कर रहा हूं। हालांकि मुझे PowerMock के साथ परीक्षण दुर्भाग्यपूर्ण java.lang.IncompatibleClassChangeError
मिल रहा है। हर इकाई परीक्षण परपावरमैक और रोबोलेक्ट्रिक का उपयोग करना - असंगत क्लास चेंजएरर
java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.ClassNode has interface org.objectweb.asm.ClassVisitor as super class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method)
:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323) at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:348)Caused by: java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
अगर मैं org.powermock
पुस्तकालयों मैं के बाद org.ow2.asm
डाल दिया।
मैवेन डिप्टी के अनुसार: पेड़ रोबोलेक्ट्रिक और पावरमैक किसी भी निर्भरता को साझा नहीं करते हैं। लेकिन जाहिरा तौर पर org.powermock: powermock मॉड्यूल-javaagent कुछ org/objectweb/ASM वर्गों पैकेज, और Robolectric org.ow2.asm पर निर्भर करता है: एएसएम: जार: 4.1 किसी विरोध।
@RunWith(RobolectricTestRunner.class)
@PrepareForTest(Helper.class)
@PowerMockIgnore({"com.sun.jmx.*", "javax.management.*"})
public class HelpFragTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
static {
PowerMockAgent.initializeIfNeeded();
}
FragmentActivity fragmentActivity;
FragmentManager fragmentManager;
ActionBarManager actionBarManager;
@Before
public void setup(){
actionBarManager = mock(ActionBarManager.class);
LowesApplication.instance().setActionBarManager(actionBarManager);
fragmentActivity = Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get();
fragmentManager = fragmentActivity.getSupportFragmentManager();
}
@Test
public void testShow(){
mockStatic(Helper.class);
HelpFrag helpFrag = HelpFrag.newInstance();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(helpFrag, null);
fragmentTransaction.commit();
assertTrue(helpFrag.isVisible());
}
}
शक्ति का उपयोग करने के लिए नकली आप इसे चलाने के लिए है पावर मॉक धावक के साथ। तो जब आप इसे रोबोलेक्ट्रिक टेस्ट रनर के साथ चलाने की कोशिश करते हैं तो इसका अर्थ नहीं है –
@EugenMartynov यह समस्या है कि जावाजेंट और 'पावरमोकरुले' को हल करने की समस्या है, [PowerMockRule] देखें (http://code.google.com/ पी/पावरमॉक/विकी/पावरमोकरूल) और [पावरमोकएजेंट] (http://code.google.com/p/powermock/wiki/PowerMockAgent)। –
कूल, अगर आप इसे हल करते हैं तो मुझे बताएं क्योंकि यह हमारे लिए भी समस्या है –