2013-09-27 2 views
4

Я встретил ошибку при тестировании getView apdater. Проверенный код вызывал View.setImageResource (0) во время тестового примера, чтобы установить пустое изображение, когда произойдет исключение.Robolectric: NotFoundException: неизвестный ресурс 0 на org.robolectric.shadows.ShadowAssetManager.getAndResolve (ShadowAssetManager.java:258)

Я провел тест robolectric-2.2-20130712.161723-17-jar-with-dependencies.jar с Eclipse. Я попытался заменить ResouceLoader с ShadowResources.createFor (новый ResourceLoader() {...}. Но это оленья кожа работа. Мой заменить ResouceLoader не был назван.

Кто-нибудь знает, как решить эту проблему?

android.content.res.Resources$NotFoundException: unknown resource 0 
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:258) 
at org.robolectric.shadows.ShadowAssetManager.getResourceValue(ShadowAssetManager.java:85) 
at android.content.res.AssetManager.getResourceValue(AssetManager.java) 
at android.content.res.Resources.getValue(Resources.java:1009) 
at android.content.res.Resources.getDrawable(Resources.java:658) 
at org.robolectric.shadows.ShadowView.buildDrawable(ShadowView.java:92) 
at org.robolectric.shadows.ShadowImageView.setImageResource(ShadowImageView.java:38) 
at android.widget.ImageView.setImageResource(ImageView.java) 
at com.mobile.client.share.edentity.PhotostreamAdapter.getView(PhotostreamAdapter.java:54) 
at com.mobile.client.share.edentity.PhotostreamAdapterTest.testGetView(PhotostreamAdapterTest.java:163) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:241) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Еще одна подобная проблема в моем тесте roboletric unit на моем Apdater ContentDetailsAdapter - это выражение из инструкции mContext.getResources(). GetString (R.string.delete_hint_title). MContext создается Robolectric.getShadowApplication(). GetApplicationContext(). с моим конфигом о Roboletric? Мне удалось вызвать ProgressDialog.show (mContext, «", "") в моем модульном тесте. Кажется, проблема всегда связана с ресурсом. стоп:

android.content.res.Resources$NotFoundException: String resource ID #0x7f07004f 
at android.content.res.Resources.getText(Resources.java:229) 
at android.content.res.Resources.getString(Resources.java:313) 
at com.mobile.client.share.edentity.ContentDetailsAdapter.checkDeletedSelection(ContentDetailsAdapter.java:220) 
at com.mobile.client.share.edentity.ContentDetailsAdapter.getCheckedItems(ContentDetailsAdapter.java:178) 
at com.mobile.client.share.edentity.SetsAdapterTest.testGetCheckedItems(SetsAdapterTest.java:361) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:241) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
+0

Устранены проблемы. Первое исключение - проблема в roboletric. Использование новейшего roboletric jar может это исправить. Вторая проблема заключается в том, что я не запускаю roboletric UT, установив рабочий каталог в тестируемый проект. –

ответ

12

У меня была аналогичная ошибка для вашей второй проблемы. Моя среда была настроена в соответствии с http://www.youtube.com/watch?v=3mjcg5gfDLE

Образец, предоставленный работает на моем Eclipse, но когда я попытался связать MyProjectTest с моим собственным приложением, появилась вторая ошибка, которую вы описали.

Видео описывают решение в 6:00.

MyProjectTest -> Run As Configuration -> JUnit -> MyProjectTestConfiguration -> Аргументы -> Нажмите 'Other' радиокнопку -> Workspace -> выберите

Забирать домой: если вы запустите robolectric тесты для в другом приложении, вы должны указать на него «Working Direcotry». Кроме того, вам нужно связать свою тестовую папку с MyProjectTest с новой тестовой папкой.

+0

Спасибо! Это сэкономило мне много времени –

+0

Awesome. Мне не нужно было делать вторую часть. Мои модульные тесты находятся в совершенно другом проекте. Настройка конфигурации запуска решла мою проблему – aryaxt

Смежные вопросы