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

标签 android unit-testing testing android-testing robolectric

Android Studio 3.0 Beta2
classpath '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)
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()));
    }
}

这是错误的堆栈跟踪:

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$

非常感谢您的任何建议。

最佳答案

As mentioned由 Google 团队的一名工程师(很可能是 Xavier Ducrohet)表示,Robolectric 存在 AAPT2 问题:

Robolectric is not compatible with aapt2.

这里有两个选项。

第一个选项 - 关注 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 {
}

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

android.enableAapt2=false

关于android - Robolectric:Resources$NotFoundException:带有 Android Gradle 插件 3 的字符串资源 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45922916/

相关文章:

android - Android Nougat 升级中的 Recyclerview 问题

android - Android 屏幕上的 TextView 对象和截断(为多屏幕设计)

android - 如何使用自定义 View 显示单选AlertDialog?

c# - 如何处理 TDD 中的接口(interface)过度使用?

python - 如何编写从 zip 文件创建 InMemoryUploadedFile 的 python 测试?

python - 针对从 SeleniumHQ Docker 镜像创建的 Selenium 网格进行 Selenium Python 测试

android - 在给定的时间间隔后在android中发出声音

javascript - React Hooks ref.current 在测试期间未定义

scala - 玩!框架 : customize which tests are run

web-services - API/Web 服务方法检查软件