2013-09-27 29 views
4

我在遇到apdater的getView時遇到了錯誤。測試代碼在測試用例期間調用View.setImageResource(0)以在異常發生時設置空白圖像。Robolectric:NotFoundException:未知資源0在org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:258)

我用Eclipse測試了robolectric-2.2-20130712.161723-17-jar-with-dependencies.jar。我試圖取代ShadowResources.createFor)的ResouceLoader(新資源加載({...},但它亙古不變的工作。我更換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) 

我的Apdater ContentDetailsAdapter的roboletric單元測試中的另一個類似問題是來自語句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 - >運行方式配置 - > JUnit的 - > MyProjectTestConfiguration - >參數 - >點擊 '其他' 單選按鈕 - >工作空間 - >選擇

的帶回家的是:如果你運行你的robolectric測試的不同的應用程序,你必須指出「工作指示」。此外,您需要將您的測試文件夾從MyProjectTest鏈接到一個新的測試文件夾中。

+0

謝謝!這節省了我很多時間 –

+0

太棒了。我不必做第二部分。我的單元測試是在一個完全不同的項目上。設置運行配置解決了我的問題 – aryaxt

相關問題