+的Mockito上Dexmaker的Andr​​oid 2 [英] Mockito + Dexmaker on Android 2

查看:384
本文介绍了+的Mockito上Dexmaker的Andr​​oid 2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看到了这个问题:
+的Mockito上Dexmaker的Andr​​oid

和使用的我走进了另一个问题的答案后:
了java.lang.RuntimeException:java.lang.IllegalArgumentException异常:优化数据目录/ SD卡不被当前用户拥有。共享存储无法保护code注入攻击你的应用程序。

我用的是最新版本的Mockito和dexmaker和dexmaker-的的Mockito

我使用一个单独的testproject。

全堆栈跟踪(testParse是我的测试功能):

 了java.lang.RuntimeException:java.lang.IllegalArgumentException异常:优化数据目录/ SD卡不被当前用户拥有。共享存储无法保护code注入攻击你的应用程序。
在com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:388)
在com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252)
在com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54)
在org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
在org.mockito.internal.MockitoCore.mock(MockitoCore.java:49)
在org.mockito.Mockito.mock(Mockito.java:1245)
在org.mockito.Mockito.mock(Mockito.java:1139)
在com.myproject.parser.JSONParserTest.testParse(JSONParserTest.java:29)
在java.lang.reflect.Method.invokeNative(本机方法)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1701)
java.lang.IllegalArgumentException异常:引起优化的数据目录/ SD卡不被当前用户拥有。共享存储无法保护code注入攻击你的应用程序。
在dalvik.system.DexFile<&初始化GT;(DexFile.java:100)
在dalvik.system.DexFile.loadDex(DexFile.java:149)
在dalvik.system.DexPathList.loadDexFile(DexPathList.java:259)
在dalvik.system.DexPathList.makeDexElements(DexPathList.java:223)
在dalvik.system.DexPathList<&初始化GT;(DexPathList.java:106)
在dalvik.system.BaseDexClassLoader<&初始化GT;(BaseDexClassLoader.java:46)
在dalvik.system.DexClassLoader<&初始化GT;(DexClassLoader.java:57)
在java.lang.reflect.Constructor.constructNative(本机方法)
在java.lang.reflect.Constructor.newInstance(Constructor.java:417)
在com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:382)
... 19个


解决方案

  //根据测试的类型,你也可以这样做:
System.setProperty(dexmaker.dexcache的getContext()getCacheDir()的getPath());

I saw this question: Mockito + Dexmaker on Android

And after the using the answer I came into another problem: 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.

I use the latest version of mockito and dexmaker and dexmaker-mockito.

I'm using a separate testproject.

Full stacktrace (testParse is my test function):

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

解决方案

//Depending on the type of test, you can also do this:
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());

这篇关于+的Mockito上Dexmaker的Andr​​oid 2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆