如何使用robolectric找到支持库资源?

时间:2014-11-27 18:20:54

标签: android robolectric

我正在尝试使用robolectric在我的Android应用程序测试中模拟某些东西。遗憾的是,在我的项目中包含一个外部库后,测试崩溃了。 错误信息是关于某些未找到的库资源。

java.lang.RuntimeException: Could not find any resource  from reference ResName{com.company.app:style/Theme_AppCompat_Light_NoActionBar} from style StyleData{name='AppTheme_Base', parent='Theme_AppCompat_Light_NoActionBar'} with theme null

有人有这个问题吗?

2 个答案:

答案 0 :(得分:8)

包含内部资源的库(AKA aar)需要映射到project.properties文件(在src / main上)。 文件内容将是这样的(如果您使用的是Android Studio):

android.library.reference.1=../app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.0

查看documentation

答案 1 :(得分:-1)

当Robolectric找到res目录时遇到麻烦。您可以创建自定义测试运行器以指定res目录的正确路径。

public class CustomTestRunner extends RobolectricTestRunner {

public CustomTestRunner(Class<?> testClass) throws InitializationError {
    super(testClass);
}

@Override
protected AndroidManifest getAppManifest(Config config) {
    final String BUILD_PATH = "src/main";
    final FileFsFile manifestFile = FileFsFile.from(BUILD_PATH, "AndroidManifest.xml");

    AndroidManifest appManifest = super.getAppManifest(config);
    return new AndroidManifest(manifestFile, appManifest.getResDirectory(), appManifest.getAssetsDirectory());
}
}

使用它替换:

@RunWith(RobolectricTestRunner.class): 在你的Robolectric测试中RunWith(MyRobolectricTestRunner.class)

在我的情况下,appManifest.getResDirectory()返回了"build/intermediates/res/merged/debug"