Использование PowerMock и Robolectric - IncompatibleClassChangeError

Я пытаюсь использовать PowerMockito для макетирования некоторых статических методов в тестах Android Robolectric. Я использую JUnit 4.8.2, Robolectric 2.2, Mockito 1.9.5 и PowerMock 1.9.5, как указаноВот, Как я должен использоватьRoboElectricTestRunnerЯ пытаюсь использоватьPowerMockRule загрузить PowerMock. Однако я получаю несчастныйjava.lang.IncompatibleClassChangeError когда тест с PowerMock запускается.

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.hoj.jj
в sun.instrument.InstrumentationImpl.loadClassAndStartAgent (InstrumentationImpl.java:323) в sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain (InstrumentationImpl.java:348)

Вызвано: java.lang.IncompatibleClassChangeError: Реализация класса в java.lang.ClassLoader.defineClass1 (собственный метод)
в java.lang.ClassLoader.defineClassCond (ClassLoader.java:637) в java.lang.ClassLoader.defineClass (ClassLoader.java:621) в java.security.SecureClassLoader.defineClass (SecureClassLoader.java:14)

Если я поставлюorg.ow2.asm послеorg.powermock библиотеки, которые я получаю:

java.lang.IncompatibleClassChangeError: класс org.objectweb.asm.tree.ClassNode имеет интерфейс org.objectweb.asm.ClassVisitor в качестве суперкласса в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoaderClassCoader .java: 637) в java.lang.ClassLoader.defineClass (ClassLoader.java:621) в java.security.SecureClassLoader.defineClass (SecureClassLoader.java:141) в java.net.URLClassLoader.defineClass (URLClassL283) на java.net.URLClassLoader.access $ 000 (URLClassLoader.java:58) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:197) на java.security.AccessController.doPrivileged (собственный метод)

накаждый модульный тест.

Согласно зависимости Maven: дерево Robolectric и PowerMock не имеют общих зависимостей.Но по всей видимостиorg.powermock: powermock-модуль-javaagent пакеты некоторыеорг / ObjectWeb / ASM классы, и Robolectric опирается наorg.ow2.asm: 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());
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос