繁体   English   中英

使用带有Gradle的Robolectric时的资源$ NotFoundException

[英]Resources$NotFoundException when using Robolectric with Gradle

我一直在关注这个教程上设置Robolectric来测试我的Android摇篮工程。

我一直在遇到这个错误:

android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name

通过从教程中下载示例项目,我已经确定问题是我的productFlavors (dev,staging,production)。 向工作示例项目添加flavor会导致同样的问题。 你可以在这个答案中看到我的build.gradle的大纲。

我已经看到了各种答案(例如这里 ),这表明我需要为每种风格指定sourceSets 我已经尝试了很多组合,但不能完全正确。 有人可以帮忙吗?

令我困惑的另一件事是我见过的所有Robolectric样本似乎都在为“instrumentTest”指定sourceSets和依赖项,即使Robolectric测试总是只在“test”文件夹中。 在我的情况下,我已经在instrumentTest文件夹中进行了Robotium测试,我不明白为什么我需要为Robotium代码添加Robolectric依赖项。

我偶然发现了同样的问题(未找到资源),并在robolectric源上找到了解决方案。 PackageName有一个setter,所以在我的自定义测试运行器中,我在返回清单之前设置了包名。 就像是:

@Override protected AndroidManifest getAppManifest(Config config) {
    String manifestProperty = System.getProperty("android.manifest");
    if (config.manifest().equals(Config.DEFAULT) && manifestProperty != null) {
        String resProperty = System.getProperty("android.resources");
        String assetsProperty = System.getProperty("android.assets");
        AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty),
                Fs.fileFromPath(assetsProperty));
        manifest.setPackageName("com.mypackagename");
        return manifest;
    }
    return super.getAppManifest(config);
}

我希望这有帮助。

Robolectric在3.0版本中解决了这个问题。 因此,只需在@Config注释中使用最新版本的Robolectric和已定义的constans参数。

@Config(
        sdk = 21,
        manifest = "src/main/AndroidManifest.xml",
        constants = BuildConfig.class
)

@RunWith(RobolectricTestRunner.class)

此外,一个重要的项目-正确Robolectric工作,你applicationIdgradle.build应该等于packageAndroidManifest applicationIdSuffix使用不会影响Robolectric。

您可以通过在@Config中指定'packageName'来解决此问题,使其成为:

@Config(
        sdk = 21, 
        manifest="src/main/AndroidManifest.xml",
        constants = BuildConfig.class,
        packageName = "com.mypackage" //this is whatever value is your AndroidManifest.xml at <manifest ... package="com.mypackage".../>
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM