首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robolectric: Resources$NotFoundException:带有Android插件3的字符串资源ID

Robolectric: Resources$NotFoundException:带有Android插件3的字符串资源ID
EN

Stack Overflow用户
提问于 2017-08-28 15:53:16
回答 8查看 15.9K关注 0票数 50
代码语言:javascript
复制
Android Studio 3.0 Beta2
classpath 'com.android.tools.build:gradle:3.0.0-beta3'
testCompile 'org.robolectric:robolectric:3.4.2'

无法运行的测试类:

代码语言:javascript
复制
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricTestRunner.class)
public class RecipeAdapterTest {
    private MainActivity activity;

    @Before
    public void setup() {

    activity = Robolectric.setupActivity(MainActivity.class);

    /* Also tried this same Error
     activity = Robolectric.buildActivity(MainActivity)
                .create()
                .resume()
                .get();
    */
    }

    @Test
    public void testActivityShouldNotBeNull() {
        assertThat(activity, is(notNullValue()));
    }
}

这是错误的堆栈跟踪:

代码语言:javascript
复制
android.content.res.Resources$NotFoundException: String resource ID #0x7f0c0020

    at android.content.res.Resources.getText(Resources.java:274)
    at android.content.res.Resources.getString(Resources.java:360)
    at android.content.Context.getString(Context.java:376)
    at org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.java:100)
    at org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.java:110)
    at org.robolectric.android.controller.ActivityController.attach(ActivityController.java:56)
    at org.robolectric.android.controller.ActivityController.of(ActivityController.java:25)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:98)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:94)
    at org.robolectric.Robolectric.setupActivity(Robolectric.java:102)
    at me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.java:63)

Edit Configurations中,我将Working Directory设置为$MODULE_DIR$

非常感谢你的建议。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-08-30 16:47:42

如前所述由谷歌团队的一名工程师(最有可能是泽维尔·杜克罗)负责,Robolectric与AAPT2有问题:

Robolectric与aapt2不兼容。

有两种选择。

第一种选择-遵循Robolectric Android 3.0+指南

在build.gradle中添加以下内容:

代码语言:javascript
复制
android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

用Robolec计量测试运行程序注释您的测试:

代码语言:javascript
复制
@RunWith(RobolectricTestRunner.class)
public class SandwichTest {
}

第二个选项:禁用AAPT2,将以下行添加到gradle.properties文件中:

代码语言:javascript
复制
android.enableAapt2=false
票数 92
EN

Stack Overflow用户

发布于 2017-12-14 12:21:43

罗波尔文献声明在AndroidStudio3.x中应该使用以下配置:

代码语言:javascript
复制
android {
  testOptions {
    unitTests.includeAndroidResources true
  }
}
票数 12
EN

Stack Overflow用户

发布于 2019-03-13 09:43:42

(对于任何正在寻找类似问题的解决方案的人来说)

一定要使用

代码语言:javascript
复制
RuntimeEnvironment.application

而不是

代码语言:javascript
复制
RuntimeEnvironment.systemContext

当您试图“手动”解析资源时。

在这种情况下,Resources$NotFoundException可能会与Robolectric一起出现。

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

https://stackoverflow.com/questions/45922916

复制
相关文章

相似问题

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