带有ADT23和Android 15的Robolectric的NoClassDefFoundError

杰姆·洛德(JM Lord)

我有一个Android项目,正在尝试使用JUnit,Mockito和Robolectric设置单元测试。我正在使用ADT23(这值得一提,因为我必须手动下载Eclipse JDT,如这篇文章所示:https : //stackoverflow.com/a/25519274/3519951)。以上所有内容均在Windows 7上运行。

运行测试时,我在Android View上遇到NoClassDefFoundError错误。

是的,Android导入了(平台android-15),以及我的Android项目...这是我的荣幸:

进口图书馆

运行配置:

  • 运行所选项目中的所有测试
  • 测试运行器是JUnit 4
  • 使用Eclipse JUnit启动器(而不是Android JUnit Test启动器)
  • 在参数选项卡中,将工作目录设置为$ {workspace_loc:ApplicationLauncherActivity},它表示我的测试项目。

这是完整的堆栈跟踪:

    java.lang.NoClassDefFoundError: android/view/View
    at com.xtremelabs.robolectric.RobolectricTestRunner.createResourceLoader(RobolectricTestRunner.java:502)
    at com.xtremelabs.robolectric.RobolectricTestRunner.setupApplicationState(RobolectricTestRunner.java:357)
    at com.xtremelabs.robolectric.RobolectricTestRunner.internalBeforeTest(RobolectricTestRunner.java:307)
    at com.xtremelabs.robolectric.RobolectricTestRunner.methodBlock(RobolectricTestRunner.java:285)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: caught an exception while obtaining a class file for android.view.View
    at javassist.Loader.findClass(Loader.java:359)
    at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(RobolectricClassLoader.java:82)
    at javassist.Loader.loadClass(Loader.java:311)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(RobolectricClassLoader.java:59)
    ... 18 more
Caused by: java.lang.RuntimeException: problem instrumenting public void android.view.View.setContentDescription(java.lang.CharSequence)
    at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethod(AndroidTranslator.java:324)
    at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethods(AndroidTranslator.java:245)
    at com.xtremelabs.robolectric.bytecode.AndroidTranslator.onLoad(AndroidTranslator.java:103)
    at javassist.Loader.findClass(Loader.java:340)
    ... 22 more
Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
    at javassist.CtClassType.getClassFile2(CtClassType.java:203)
    at javassist.CtClassType.subtypeOf(CtClassType.java:303)
    at javassist.compiler.MemberResolver.compareSignature(MemberResolver.java:247)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:119)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:96)
    at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:704)
    at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)
    at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)
    at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)
    at javassist.compiler.TypeChecker.atArrayInit(TypeChecker.java:185)
    at javassist.compiler.ast.ArrayInit.accept(ArrayInit.java:28)
    at javassist.compiler.TypeChecker.atNewArrayExpr(TypeChecker.java:161)
    at javassist.compiler.TypeChecker.atNewExpr(TypeChecker.java:143)
    at javassist.compiler.ast.NewExpr.accept(NewExpr.java:72)
    at javassist.compiler.JvstTypeChecker.atMethodArgs(JvstTypeChecker.java:220)
    at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:702)
    at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)
    at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)
    at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)
    at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
    at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:390)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:354)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
    at javassist.compiler.Javac.compileStmnt(Javac.java:568)
    at javassist.CtBehavior.insertBefore(CtBehavior.java:705)
    at javassist.CtBehavior.insertBefore(CtBehavior.java:685)
    at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethod(AndroidTranslator.java:321)
    ... 25 more
Caused by: java.io.IOException: invalid constant type: 15
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:1090)
    at javassist.bytecode.ConstPool.read(ConstPool.java:1033)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:149)
    at javassist.bytecode.ClassFile.read(ClassFile.java:764)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:108)
    at javassist.CtClassType.getClassFile2(CtClassType.java:190)
    ... 57 more

一个大学有一个类似的设置目前正在运行,但是除了他运行ADT 22.3之外,我们没有发现任何明显的区别。任何帮助表示赞赏,非常感谢!

编辑:我想你们中有些人可能想看一个测试课程,这是一个。您会发现其中甚至没有对Android对象的引用,因此该错误确实与Robolectric的初始化有关...

import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import com.xtremelabs.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class BogusTest
{

    @Before
    public void setUp() throws Exception
    {
    }

    @Test
    public void theTest()
    {
        assertTrue(true);
    }
}
杰姆·洛德(JM Lord)

问题解决了。

我们决定退出使用ADT,并使用所需的插件(Android DDMS,Android开发工具,Android本机开发工具)安装Eclipse Luna。它比安装ADT复杂得多,现在测试运行良好。这个问题将无法解释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自Robolectric的NoClassDefFoundError,带有ADT23和Android 15

来自分类Dev

尝试使用Gradle,Robolectric和Travis CI测试Android应用时出现NoClassDefFoundError

来自分类Dev

NoClassDefFoundError:...将Robolectric与Android库(AAR)结合使用时,R $样式化

来自分类Dev

Robolectric NoClassDefFoundError与外部库

来自分类Dev

带有Mapsforge 0.4.0和Eclipse的NoClassDefFoundError

来自分类Dev

RuntimeException:存根!在带有Robolectric的JSONObject上

来自分类Dev

带有Facebook SDK 4.0的Robolectric 3.0

来自分类Dev

Nineoldandroids NullPointerException在带有Robolectric的AnimatorProxy中

来自分类Dev

带有Google API的Robolectric-AnnotationFormatError

来自分类Dev

RuntimeException:存根!在带有Robolectric的JSONObject上

来自分类Dev

带有HttpResponseCache和DiskLruCache的java.lang.NoClassDefFoundError

来自分类Dev

带有Mapsforge 0.4.0和Eclipse的NoClassDefFoundError无法构建

来自分类Dev

Robolectric和GoogleCloudMessaging

来自分类Dev

Robolectric和FragmentTestUtil

来自分类Dev

Robolectric和GoogleCloudMessaging

来自分类Dev

带有KitKat的Android设备上的java.lang.NoClassDefFoundError

来自分类Dev

Robolectric与Android测试框架

来自分类Dev

包括Robolectric时Espresso测试上的java.lang.NoClassDefFoundError

来自分类Dev

使用Robolectric和Dagger进行Android测试

来自分类Dev

Robolectric 2.4和android.util.Log

来自分类Dev

Robolectric 和 Evernotes android-job 库

来自分类Dev

Robolectric样本和Gradle插件

来自分类Dev

让Mockito与RoboGuice和Robolectric合作

来自分类Dev

Robolectric和改造-等待响应

来自分类Dev

Robolectric的影子对象和模拟

来自分类Dev

用SugarORM和Robolectric测试

来自分类Dev

Robolectric样本和Gradle插件

来自分类Dev

具有BugSense的Robolectric NullPointerException

来自分类Dev

具有Retrofit2和Mockito或Robolectric的Android单元测试

Related 相关文章

  1. 1

    来自Robolectric的NoClassDefFoundError,带有ADT23和Android 15

  2. 2

    尝试使用Gradle,Robolectric和Travis CI测试Android应用时出现NoClassDefFoundError

  3. 3

    NoClassDefFoundError:...将Robolectric与Android库(AAR)结合使用时,R $样式化

  4. 4

    Robolectric NoClassDefFoundError与外部库

  5. 5

    带有Mapsforge 0.4.0和Eclipse的NoClassDefFoundError

  6. 6

    RuntimeException:存根!在带有Robolectric的JSONObject上

  7. 7

    带有Facebook SDK 4.0的Robolectric 3.0

  8. 8

    Nineoldandroids NullPointerException在带有Robolectric的AnimatorProxy中

  9. 9

    带有Google API的Robolectric-AnnotationFormatError

  10. 10

    RuntimeException:存根!在带有Robolectric的JSONObject上

  11. 11

    带有HttpResponseCache和DiskLruCache的java.lang.NoClassDefFoundError

  12. 12

    带有Mapsforge 0.4.0和Eclipse的NoClassDefFoundError无法构建

  13. 13

    Robolectric和GoogleCloudMessaging

  14. 14

    Robolectric和FragmentTestUtil

  15. 15

    Robolectric和GoogleCloudMessaging

  16. 16

    带有KitKat的Android设备上的java.lang.NoClassDefFoundError

  17. 17

    Robolectric与Android测试框架

  18. 18

    包括Robolectric时Espresso测试上的java.lang.NoClassDefFoundError

  19. 19

    使用Robolectric和Dagger进行Android测试

  20. 20

    Robolectric 2.4和android.util.Log

  21. 21

    Robolectric 和 Evernotes android-job 库

  22. 22

    Robolectric样本和Gradle插件

  23. 23

    让Mockito与RoboGuice和Robolectric合作

  24. 24

    Robolectric和改造-等待响应

  25. 25

    Robolectric的影子对象和模拟

  26. 26

    用SugarORM和Robolectric测试

  27. 27

    Robolectric样本和Gradle插件

  28. 28

    具有BugSense的Robolectric NullPointerException

  29. 29

    具有Retrofit2和Mockito或Robolectric的Android单元测试

热门标签

归档