首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android.content.res.Resources$NotFoundException在Robolector2.4中的应用

android.content.res.Resources$NotFoundException在Robolector2.4中的应用
EN

Stack Overflow用户
提问于 2015-04-09 08:02:59
回答 1查看 1.7K关注 0票数 6

在从命令行运行单元测试时,加载资源时遇到问题。它在IntelliJ中运行得很好。

我在用:

  • 构建:gradle:1.1.3
  • org.robolectric:robolectric-gradle-plugin:1.0.1
  • Org.robolecture:robolectric:2.4

我有以下项目结构(多模块):

代码语言:javascript
复制
+---module1
|   |   build.gradle
    |   \---src
    |       +---main
    |       |   |   AndroidManifest.xml
    |       |   |   
    |       |   +---res
    |       |   |   \---values
    |       |   |           strings.xml
    |       \---test
    |           \---java
    |               \---example
    |                    |   FooTest.java
+---module2
etc

我的测试(简化)如下:

代码语言:javascript
复制
@Config(emulateSdk = 18, reportSdk = 18, manifest = "./src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class FooTest {

    @Test
    public void test() {
        String result = Robolectric.application.getString(R.string.error_message);

         assertThat(result, notNullValue());
    }
 }

我知道这堆痕迹:

代码语言:javascript
复制
android.content.res.Resources$NotFoundException: unknown resource 2131361826
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:311)
at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:69)
at android.content.res.AssetManager.getResourceText(AssetManager.java)
at android.content.res.Resources.getText(Resources.java:235)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:363)
at android.content.res.Resources.getText(Resources.java)
at android.content.res.Resources.getString(Resources.java:325)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:41)
at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:96)
at android.content.Context.getString(Context.java)

Note:我对Gradle非常陌生,所以很可能在某个地方出现了配置错误。我假设,通过遵循项目结构约定,我不需要指定在哪里找到资源。我试着指定它们,但没有任何结果:

代码语言:javascript
复制
android {
    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['src/main/assets']
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-11 18:49:59

在调查过程中,我们发现了问题的原因。如果您使用android gradle plugin v1.1.x,那么您就不需要普通的robolectric gradle plugin

注意,不正确的robolectric gradle plugin版本会破坏您的测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29533041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档