2013-09-10 2 views
1

Я видел этот вопрос: Mockito + Dexmaker on AndroidMockito + Dexmaker на Android 2

И после того, используя ответ я пришел в другую проблему: java.lang.RuntimeException: java.lang.IllegalArgumentException: Оптимизированный каталог данных/SDCard не принадлежит текущему пользователю. Совместное хранилище не может защитить ваше приложение от атак с помощью кода.

Я использую последнюю версию mockito и dexmaker и dexmaker-mockito.

Я использую отдельный тестовый проект.

Полный StackTrace (testParse мой тест функции):

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 
+0

Опубликовать полный след стека. – kabuko

ответ

1

Я нашел решение на http://code.google.com/p/dexmaker/issues/detail?id=2

Что работал укладывал следующую строку в нАлАдкА():

System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath()); 

Будем надеяться, что исправление будет принято вскоре вместо использования этого обходного пути.

1
//Depending on the type of test, you can also do this: 
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath()); 
Смежные вопросы