Robolectric:Resources$NotFoundException:带有 Android Gradle 插件 3 的字符串资源 ID [英] Robolectric: Resources$NotFoundException: String resource ID with Android Gradle Plugin 3

查看:41
本文介绍了Robolectric:Resources$NotFoundException:带有 Android Gradle 插件 3 的字符串资源 ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android Studio 3.0 Beta2类路径 'com.android.tools.build:gradle:3.0.0-beta3'testCompile 'org.robolectric:robolectric:3.4.2'

我使用的测试类无法运行:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)@RunWith(RobolectricTestRunner.class)公共类 RecipeAdapterTest {私人 MainActivity 活动;@前公共无效设置(){活动 = Robolectric.setupActivity(MainActivity.class);/* 也试过同样的错误活动 = Robolectric.buildActivity(MainActivity).创建().恢复().得到();*/}@测试公共无效 testActivityShouldNotBeNull() {assertThat(activity, is(notNullValue()));}}

这是错误的堆栈跟踪:

android.content.res.Resources$NotFoundException:字符串资源 ID #0x7f0c0020在 android.content.res.Resources.getText(Resources.java:274)在 android.content.res.Resources.getString(Resources.java:360)在 android.content.Context.getString(Context.java:376)在 org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.java:100)在 org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.java:110)在 org.robolectric.android.controller.ActivityController.attach(ActivityController.java:56)在 org.robolectric.android.controller.ActivityController.of(ActivityController.java:25)在 org.robolectric.Robolectric.buildActivity(Robolectric.java:98)在 org.robolectric.Robolectric.buildActivity(Robolectric.java:94)在 org.robolectric.Robolectric.setupActivity(Robolectric.java:102)在 me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.java:63)

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

非常感谢您的任何建议.

解决方案

如上所述由 Google 团队的工程师(最有可能是 Xavier Ducrohet),Robolectric 在 AAPT2 方面存在问题:

<块引用>

Robolectric 与 aapt2 不兼容.

这里有两个选项.

第一个选项 - 遵循 Robolectric Android Studio 3.0+ 指南<块引用>

将以下内容添加到您的 build.gradle:

android {测试选项{单元测试{包括AndroidResources = true}}}

<块引用>

使用 Robolectric 测试运行器注释您的测试:

@RunWith(RobolectricTestRunner.class)公共类三明治测试{}

<小时>

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

android.enableAapt2=false

Android Studio 3.0 Beta2
classpath 'com.android.tools.build:gradle:3.0.0-beta3'
testCompile 'org.robolectric:robolectric:3.4.2'

Test class that I am using that fails to run:

@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()));
    }
}

This is the stack trace of the error:

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)

In the Edit Configurations I have set the Working Directory to $MODULE_DIR$

Many thanks for any suggestion.

解决方案

As mentioned by an engineer from Google team (most possibly Xavier Ducrohet), Robolectric has issues with AAPT2:

Robolectric is not compatible with aapt2.

Two options here.

First option - follow Robolectric guidelines for Android Studio 3.0+

Add the following to your build.gradle:

android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

Annotate your test with the Robolectric test runner:

@RunWith(RobolectricTestRunner.class)
public class SandwichTest {
}


Second option: disable AAPT2 adding following line into gradle.properties file:

android.enableAapt2=false

这篇关于Robolectric:Resources$NotFoundException:带有 Android Gradle 插件 3 的字符串资源 ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆