Я настроил тестовый проект Android, который запускает тесты Junit. Он использует два проекта Eclipse «Application» и «ApplicationTest», где мои тесты находятся в проекте «ApplicationTest». В одном из моих тестов мне нужен доступ к файлу, это прекрасно работает, если я помещаю файл на SD-карту и указываю на него объект File. Однако я хотел бы получить доступ к файлу в качестве ресурса, но это не похоже на работу. Вот что я сделал:
- Сохраненный файл в
ApplicationTest/res/raw/myfile.xml
- Пытаясь получить его, используя:
InputStream is = getContext().getResources().openRawResource(R.raw.myfile);
Но это дает мне следующее исключение:
android.content.res.Resources$NotFoundException: File Hello World, HelloAndroidActivity! from drawable resource ID #0x7f040000
at android.content.res.Resources.openRawResource(Resources.java:823)
at android.content.res.Resources.openRawResource(Resources.java:799)
at com.quizzer.test.QuestionHandlerTests.testImportQuestions(Tests.java:182)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
Caused by: java.io.FileNotFoundException: Hello World, HelloAndroidActivity!
at android.content.res.AssetManager.openNonAssetNative(Native Method)
at android.content.res.AssetManager.openNonAsset(AssetManager.java:406)
at android.content.res.Resources.openRawResource(Resources.java:820)
... 14 more
Мой тестовый класс расширяет AndroidTestCase, так что вот откуда берется контекст.
Обновление:
Таким образом, проблема заключается в том, что во время компиляции используются ресурсы в тестовом проекте, но во время выполнения используются ресурсы в основном проекте. Я пока не уверен, как это исправить. Так что в настоящее время это работает, только если я поместил один и тот же исходный ресурс как в тестовый проект, так и в основной проект, что, конечно, довольно глупо.