我刚刚设置了带有新应用程序的Roboelectric 3.2.2,我写了第一个简单测试:
@RunWith(RobolectricTestRunner.class)
@Config(manifest="src/main/AndroidManifest.xml",
packageName="my.pacakge.name.debug")
public class MainActivityTest {
@Test
public void clickButton() {
MainActivity mainActivity = Robolectric.setupActivity(MainActivity.class);
String text = ((TextView)mainActivity.findViewById(R.id.text_main)).getText().toString();
assertEquals("Should equal Hello World!", "Hello World!", text);
}
}
我已经在这里和这里遵循所有设置和说明,但是每次尝试进行测试时,我仍然会遇到此错误:
android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0 in packages [android, my.package.name.debug]
此例外发生在我正在调用setupActivity()
的测试的第一行。
它对我有用:添加 @Config(manifest = "src/main/AndroidManifest.xml")
@Config(manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {
@Test
public void testSomething() throws Exception {
assertTrue(Robolectric.setupActivity(MainActivityTest .class) != null);
}
}
注意1:如果您仍然遇到相同的错误(创建新项目时发生)
原因与不同的工作目录有关答案在这里:https://stackoverflow.com/a/31469526/4802664
注2:使用
Android Studio 3.0(金丝雀9)
Gradle 4.1
Android Gradle插件3.0.0-Alpha9
robolectric:3.4.2
gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-alpha9'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
// Espresso
androidTestImplementation 'com.android.support.test:runner:1.0.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0'
// Robolectric
testImplementation 'org.hamcrest:hamcrest-library:1.3'
testImplementation 'org.robolectric:robolectric:3.4.2'
}
使用自定义RobolectrictEstrunner并提供缺失的系统属性时,此插件对我有用。
public class CustomRobolectricTestRunner extends RobolectricTestRunner {
public CustomRobolectricTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
String buildVariant = BuildConfig.BUILD_TYPE + (BuildConfig.FLAVOR.isEmpty()? "" : "/" + BuildConfig.FLAVOR);
System.setProperty("android.package", BuildConfig.APPLICATION_ID);
System.setProperty("android.manifest", "build/intermediates/manifests/full/" + buildVariant + "/AndroidManifest.xml");
System.setProperty("android.resources", "build/intermediates/res/" + buildVariant);
System.setProperty("android.assets", "build/intermediates/assets/" + buildVariant);
}
}
编辑:您还必须在单元测试运行配置中使用其他工作目录。最好的是更改默认配置并使用$ module_dir $ https://code.google.com/p/android/issues/issues/detail?id=158015#c5