编辑
经过进一步调查,发现这个ant test命令也不起作用,所以这不是IntelliJ的问题。
在应用程序启动时有一些警告表明问题来自与 ormlite 框架的错误链接:
WARN/dalvikvm(22209): Class resolved by unexpected DEX: Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;(0x4051f5e8):0x98558 ref [Lcom/j256/ormlite/dao/Dao;] Lcom/j256/ormlite/dao/Dao;(0x4051f5e8):0x97ec0 WARN/dalvikvm(22209): (Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO; had used a different Lcom/j256/ormlite/dao/Dao; during pre-verification) WARN/dalvikvm(22209): Link of class 'Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;' failed
但这只发生在测试项目中,主项目没有问题。
我发现自从 R17 以来,jar“真的”需要在 libs 目录中,所以我想也许我应该将 jar 复制到测试项目的 libs 目录中,但它并没有改变任何东西。
原创
我的 Android 测试项目没有在 Android 上运行,我收到以下错误:
java.lang.NoClassDefFoundError: com.mycompany.android.module.shop.database.MyDBHelper at com.mycompany.android.module.shop.dao.DAOFactory.(DAOFactory.java:51) at com.mycompany.android.module.shop.dao.DAOFactory.initSingleton(DAOFactory.java:58) at com.mycompany.android.app.shop.test.EShopBaseTestCase.setUp(EShopBaseTestCase.java:41) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) Caused by: java.lang.ClassNotFoundException: com.mycompany.android.module.shop.database.MyDBHelper in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.mycompany.android.app.shop.test-1.apk:/mnt/asec/com.mycompany.android.app.shop-1/pkg.apk] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) at java.lang.ClassLoader.loadClass(ClassLoader.java:551) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) ... 12 more
在 Eclipse 上测试运行没有任何问题,所以我猜这是一个配置问题。
“缺失”类是 App 的源类,它不在 jar 中,也不在任何外部框架中。
更让我困惑的是,查看堆栈跟踪 com.mycompany.android.module.shop.dao.DAOFactory 存在但不存在 com.mycompany.android.module.shop.database.MyDBHelper(它们在同一个项目中...)
有人有想法吗?我已经坚持了一段时间了。这不是我第一次将测试项目与 IntelliJ 一起使用,所以我将我的配置与工作项目进行了比较,但我发现没有任何区别......
最佳答案
好的,实际上重要的信息是
[...] had used a different Lcom/j256/ormlite/dao/Dao; during pre-verification
这意味着我的 ormlite jar 被复制到每个项目中,而不是在主项目中正确导出。
只需选中 jar 上的“导出”复选框即可解决问题。
FragmentActivity can not be tested via ActivityInstrumentationTestCase2 给我很大的帮助
关于android - IntelliJ 上的 Android 测试中源文件的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623692/