Używanie PowerMock i Robolectric - IncompatibleClassChangeError

Próbuję użyć PowerMockito, aby wyszydzić niektóre metody statyczne w testach Android Robolectric. Używam JUnit 4.8.2, Robolectric 2.2, Mockito 1.9.5 i PowerMock 1.9.5 zgodnie z zaleceniamitutaj. Jak muszę użyćRoboElectricTestRunner, Próbuję użyćPowerMockRule uruchomić program PowerMock. Mam jednak nieszczęściejava.lang.IncompatibleClassChangeError kiedy test z PowerMock działa.

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Metoda natywna)
w sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) w sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) w java.lang.reflect.Method.invoke (Method.java:597)
w sun.instrument.InstrumentationImpl.loadClassAndStartAgent (InstrumentationImpl.java:323) w sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain (InstrumentationImpl.java:348)

Przyczyna: java.lang.IncompatibleClassChangeError: Klasa implementująca java.lang.ClassLoader.defineClass1 (metoda natywna)
at java.lang.ClassLoader.defineClassCond (ClassLoader.java:637) w java.lang.ClassLoader.defineClass (ClassLoader.java:621) w java.security.SecureClassLoader.defineClass (SecureClassLoader.java:141)

Jeśli to zrobięorg.ow2.asm poorg.powermock biblioteki, które otrzymuję:

java.lang.IncompatibleClassChangeError: klasa org.objectweb.asm.tree.ClassNode ma interfejs org.objectweb.asm.ClassVisitor jako super klasa w java.lang.ClassLoader.defineClass1 (metoda natywna) w java.lang.ClassLoader.defineClassCond (ClassLoader .java: 637) w java.lang.ClassLoader.defineClass (ClassLoader.java:621) w java.security.SecureClassLoader.defineClass (SecureClassLoader.java:141) w java.net.URLClassLoader.defineClass (URLClassLoader.java:283) w java.net.URLClassLoader.access $ 000 (URLClassLoader.java:58) w java.net.URLClassLoader $ 1.run (URLClassLoader.java:197) w java.security.AccessController.doPrivileged (metoda natywna)

nakażdy test jednostkowy.

Zgodnie z depresją Mavena: drzewo Robolectric i PowerMock nie udostępniają żadnych zależności.Ale widocznieorg.powermock: powermock-module-javaagent niektóre pakietyorg / objectweb / asm klasy i Robolectric polega naorg.ow2.asm: asm: jar: 4.1 powodując konflikt.

@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());
    }
}

questionAnswers(1)

yourAnswerToTheQuestion