首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 2上的Mockito + Dexmaker

Android 2上的Mockito + Dexmaker
EN

Stack Overflow用户
提问于 2013-09-11 06:08:49
回答 2查看 1.6K关注 0票数 1

我看到了这个问题:Mockito + Dexmaker on Android

在使用答案之后,我遇到了另一个问题: java.lang.RuntimeException: java.lang.IllegalArgumentException:优化的数据目录/sdcard不属于当前用户。共享存储不能保护您的应用程序免受代码注入攻击。

我使用的是最新版本的mockito、dexmaker和dexmaker mockito。

我正在使用一个单独的测试项目。

完整的堆栈跟踪(testParse是我的测试函数):

代码语言:javascript
复制
java.lang.RuntimeException: java.lang.IllegalArgumentException: Optimized data directory /sdcard is not owned by the current user. Shared storage cannot protect your application from code injection attacks.
at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:388)
at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252)
at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:49)
at org.mockito.Mockito.mock(Mockito.java:1245)
at org.mockito.Mockito.mock(Mockito.java:1139)
at com.myproject.parser.JSONParserTest.testParse(JSONParserTest.java:29)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Caused by: java.lang.IllegalArgumentException: Optimized data directory /sdcard is not owned by the current user. Shared storage cannot protect your application from code injection attacks.
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.loadDex(DexFile.java:149)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:259)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:223)
at dalvik.system.DexPathList.<init>(DexPathList.java:106)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:46)
at dalvik.system.DexClassLoader.<init>(DexClassLoader.java:57)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:382)
... 19 more
EN

回答 2

Stack Overflow用户

发布于 2013-09-12 03:05:27

我在http://code.google.com/p/dexmaker/issues/detail?id=2上找到了解决方案

有效的方法是将以下行放入setUp()中:

代码语言:javascript
复制
System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath());

让我们希望很快就能解决这个问题,而不是使用这个变通方法。

票数 1
EN

Stack Overflow用户

发布于 2013-10-09 17:37:51

代码语言:javascript
复制
//Depending on the type of test, you can also do this:
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18729569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档