Robolectric asm NoSuchMethodError,类路径问题?

时间:2014-04-08 16:12:42

标签: android debugging junit intellij-idea robolectric

在提取新更改(2.3-SNAPSHOT)后,我的所有应用测试都会失败,结果相同。当实例化TestClass时,代码失败,并且恰好在(反射地)调用getConstructors()方法时。提出的例外是:

java.lang.NoSuchMethodError: org.objectweb.asm.MethodVisitor.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V at org.objectweb.asm.commons.GeneratorAdapter.invokeInsn(Unknown Source) at org.objectweb.asm.commons.GeneratorAdapter.invokeVirtual(Unknown Source) at org.robolectric.bytecode.AsmInstrumentingClassLoader$ClassInstrumentor.instrumentConstructor(AsmInstrumentingClassLoader.java:541) at org.robolectric.bytecode.AsmInstrumentingClassLoader$ClassInstrumentor.instrument(AsmInstrumentingClassLoader.java:422) at org.robolectric.bytecode.AsmInstrumentingClassLoader.getInstrumentedBytes(AsmInstrumentingClassLoader.java:245) at org.robolectric.bytecode.AsmInstrumentingClassLoader.findClass(AsmInstrumentingClassLoader.java:159) at org.robolectric.bytecode.AsmInstrumentingClassLoader.loadClass(AsmInstrumentingClassLoader.java:98) at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2493) at java.lang.Class.getConstructors(Class.java:1517) at org.junit.runners.model.TestClass.<init>(TestClass.java:39) at org.junit.runners.ParentRunner.<init>(ParentRunner.java:75) at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57) at org.robolectric.RobolectricTestRunner$HelperTestRunner.<init>(RobolectricTestRunner.java:649) at org.robolectric.RobolectricTestRunner.getHelperTestRunner(RobolectricTestRunner.java:289) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:206) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) [CUT]

我在Intellij IDEA中运行,我的.iml正确显示:

<orderEntry type="library" exported="" name="asm-5.0.1" level="project" />

此外,如果我调试到asm库,我会看到:

public void visitMethodInsn(int i, java.lang.String s, java.lang.String s1, java.lang.String s2, boolean b) { /* compiled code */ }

我真的不知道它是否与Robolectric有关,因为当我mvn clean install时所有标准测试都通过了......可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我得到了同样的错误。看起来你的类路径中有一个冲突版本的asm,可能是asm 4.x,它应该是asm 5.另外,请注意asm有两种形式:asm-all包含asm和asm的所有类,asm-utils,asm-tree等,它们是拆分包。这也可能造成冲突。