相关疑难解决方法(0)

使用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的测试运行时,我很不幸.

Sun.reflect.DeativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的java.lang.reflect.InvocationTargetException
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)

引发者:java.lang.IncompatibleClassChangeError:
在java.lang.ClassLoader.defineClass(ClassLoader.java)java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)的java.lang.ClassLoader.defineClass1(Native Method)中实现类:621)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)

如果我把图书馆放到org.ow2.asm后面,org.powermock我得到:

java.lang.IncompatibleClassChangeError:class org.objectweb.asm.tree.ClassNode在java.lang.ClassLoader.defineClassCond(ClassLoader)的java.lang.ClassLoader.defineClass1(Native Method)中将接口org.objectweb.asm.ClassVisitor作为超类.java:637)java.lang.ClassLoader.defineClass(ClassLoader.java:621),位于java.net.URLClassLoader.defineClass(URLClassLoader.java:283)java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 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)

每个单元测试.

根据Maven依赖性:树Robolectric和PowerMock不共享任何依赖.显然org.powermock:powermock-module-javaagent打包了一些org/objectweb/asm类,而Robolectric依赖于org.ow2.asm:asm:jar: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; …
Run Code Online (Sandbox Code Playgroud)

java android powermock robolectric

16
推荐指数
1
解决办法
5820
查看次数

标签 统计

android ×1

java ×1

powermock ×1

robolectric ×1