1

编辑

经过更多调查,发现这个有ant test命令也不起作用,所以这不是 IntelliJ 的问题。

应用程序启动时有一些警告表明问题来自与 ormlite 框架的错误链接:

WARN/dalvikvm(22209):类被意外的 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;在预验证期间使用了不同的 Lcom/j256/ormlite/dao/Dao;)

WARN/dalvikvm(22209): 类 'Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;' 的链接 失败的

但这仅发生在测试项目中,主项目没有问题。

我发现从 R17 开始,jar '真的' 需要在 libs 目录中,所以我想也许我应该将 jar 复制到测试项目 libs 目录中,但它没有改变任何东西。

原来的

我的 Android 测试项目无法在 Android 上运行,我收到以下错误:

java.lang.NoClassDefFoundError: com.mycompany.android.module.shop.database.MyDBHelper
在 com.mycompany.android.module.shop.dao.DAOFactory.(DAOFactory.java:51)
在 com.mycompany.android.module.shop.dao.DAOFactory.initSingleton(DAOFactory.java:58)
在 com.mycompany.android.app.shop.test.EShopBaseTestCase.setUp(EShopBaseTestCase.java:41)
在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
在 android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
引起: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]
在 dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:551)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:511)
... 12 更多

测试在 Eclipse 上运行没有任何问题,所以我猜这是配置问题。

'missing' 类是 App 的源类,它不在 jar 中,也不在任何外部框架中。

更让我困惑的是,查看堆栈跟踪 com.mycompany.android.module.shop.dao.DAOFactory 存在但不存在 com.mycompany.android.module.shop.database.MyDBHelper (它们在同一个项目中...... )

有人有想法吗?我已经坚持了一段时间了。这不是我第一次将测试项目与 IntelliJ 一起使用,所以我将我的配置与工作项目进行了比较,但我发现根本没有区别......

4

1 回答 1

2

好的,实际上重要的信息是

[...] 使用了不同的 Lcom/j256/ormlite/dao/Dao;在预验证期间

这意味着我的 ormlite jars 在每个项目中复制而不是在主项目中正确导出。

只需检查 jar 上的“导出”复选框即可解决问题。

我得到了 FragmentActivity 的极大帮助,无法通过 ActivityInstrumentationTestCase2 进行测试

于 2013-02-01T14:17:41.927 回答