我正在尝试使用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
有人有这个问题吗?
答案 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
答案 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"
。