Android.content.res.Resources $ NotFoundException en Robolectric 2.4
Tengo problemas para cargar recursos al ejecutar pruebas de unidad desde la línea de comandos. Funciona bien en IntelliJ.
Estoy usando:
- Algunas pruebas Robolectric fallan cuando funcionan todas juntas pero pasan individualmente
- Estoy estudiando Robolectric pero se ha producido un error
- Robolectric 2.4 NoSuchMethodError no se puede transmitir a RuntimeException al crear actividad
- Android Studio + Robolectric + Gradle Class Not Found Excepción
- Cómo utilizar findViewById () en robolectric
- Com.android.tools.build:gradle:1.1.3
- Org.robolectric: robolectric-gradle-plugin: 1.0.1
- Org.robolectric: robolectric: 2.4
Tengo la siguiente estructura de proyecto (Multi-módulo):
+---module1 | | build.gradle | \---src | +---main | | | AndroidManifest.xml | | | | | +---res | | | \---values | | | strings.xml | \---test | \---java | \---example | | FooTest.java +---module2 etc
Mi prueba (simplificada) se ve así:
@Config(emulateSdk = 18, reportSdk = 18, manifest = "./src/main/AndroidManifest.xml") @RunWith(RobolectricTestRunner.class) public class FooTest { @Test public void test() { String result = Robolectric.application.getString(R.string.error_message); assertThat(result, notNullValue()); } }
Obtengo este stacktrace:
android.content.res.Resources$NotFoundException: unknown resource 2131361826 at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:311) at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:69) at android.content.res.AssetManager.getResourceText(AssetManager.java) at android.content.res.Resources.getText(Resources.java:235) at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:363) at android.content.res.Resources.getText(Resources.java) at android.content.res.Resources.getString(Resources.java:325) at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:41) at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:96) at android.content.Context.getString(Context.java)
Nota : Soy bastante nuevo en Gradle por lo que es probable que haya una configuración errónea en alguna parte. He asumido que siguiendo la convención de la estructura del proyecto que no necesito especificar dónde encontrar recursos. Traté de especificarlas pero sin ninguna suerte:
android { sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] } } }
- Pruebas unitarias Robolectric fallan después de Multidex
- Roboeléctrico con test.R.java
- Recursos $ NotFoundException al ejecutar pruebas Roboeléctricas
- Android - Prueba de un recurso de cadena con Robolectric
- Android java.lang.NoClassDefFoundError: R $ string
- Robolectric filenotFound en archivos de activos
- ¿Cómo ejecutar la prueba de unidad en un módulo de Android?
- No se puede agregar una configuración con el nombre 'testCompile' ya que una configuración con ese nombre ya existe
Durante la investigación encontramos la causa del problema. Si utiliza android gradle plugin v1.1.x
entonces usted no necesita en común robolectric gradle plugin
.
Tenga cuidado de que la versión incorrecta de robolectric gradle plugin
romperá sus pruebas.