运行Android测试时为什么会出现非法访问错误?

时间:2010-03-12 08:57:41

标签: android unit-testing

在模拟器上运行我的Android测试时,我得到以下堆栈跟踪:

java.lang.NoClassDefFoundError: client.HttpHelper
at client.Helper.<init>(Helper.java:14)  
at test.Tests.setUp(Tests.java:15)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520)
Caused by: java.lang.IllegalAccessError: cross-loader access from pre-verified class
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClass(DexFile.java:193)  
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:203)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
... 11 more

我从一个额外的项目中运行我的测试。从其他项目加载类似乎存在一些问题。我之前已经进行了测试,但现在他们失败了。正在测试的项目没有问题。

助手班的第14行是:

this.httpHelper = new HttpHelper(userProfile);

我启动了一个负责执行httpqueries的HttpHelper类。我觉得这个辅助类不再可用,但我不知道为什么。

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,但在我的情况下,我将库引用添加到应用程序和测试项目中。

通过从测试项目中删除对库的引用并仅保留对应用程序项目的引用,问题得以解决。 java.lang.IllegalAccessError异常和消息'由意外的DEX解析的类'是帮助解决这个问题的线索。