test studio example activity android unit-testing testing android-testing robolectric

example - robolectric android studio



Robolectric: Resources $ NotFoundException: Id. De recurso de cadena con Android Gradle Plugin 3 (5)

Android Studio 3.0 Beta2 classpath ''com.android.tools.build:gradle:3.0.0-beta3'' testCompile ''org.robolectric:robolectric:3.4.2''

Clase de prueba que estoy usando que no se puede ejecutar:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP) @RunWith(RobolectricTestRunner.class) public class RecipeAdapterTest { private MainActivity activity; @Before public void setup() { activity = Robolectric.setupActivity(MainActivity.class); /* Also tried this same Error activity = Robolectric.buildActivity(MainActivity) .create() .resume() .get(); */ } @Test public void testActivityShouldNotBeNull() { assertThat(activity, is(notNullValue())); } }

Esta es la traza de la pila del error:

android.content.res.Resources$NotFoundException: String resource ID #0x7f0c0020 at android.content.res.Resources.getText(Resources.java:274) at android.content.res.Resources.getString(Resources.java:360) at android.content.Context.getString(Context.java:376) at org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.java:100) at org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.java:110) at org.robolectric.android.controller.ActivityController.attach(ActivityController.java:56) at org.robolectric.android.controller.ActivityController.of(ActivityController.java:25) at org.robolectric.Robolectric.buildActivity(Robolectric.java:98) at org.robolectric.Robolectric.buildActivity(Robolectric.java:94) at org.robolectric.Robolectric.setupActivity(Robolectric.java:102) at me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.java:63)

En las Edit Configurations he establecido el Working Directory en $MODULE_DIR$

Muchas gracias por cualquier sugerencia.


En mi caso, lo siguiente resolvió mi problema: "El problema está relacionado con Android Studio. Ve a ''Ejecutar'' -> ''Editar configuraciones ...'' y cambia el valor ''Directorio de trabajo'' a $ MODULE_DIR $

Ejecute sus pruebas.

Más información aquí en ''Construyendo con Android Studio''. "

referencia: https://github.com/robolectric/robolectric/issues/2653


La documentación de Robolectric indica que la siguiente configuración se debe usar con Android Studio 3.x:

android { testOptions { unitTests.includeAndroidResources true } }


Si su compilación falla debido a un AAPT2 procesamiento de recursos de AAPT2 o si desea usar Roboelectric , puede desactivar AAPT2 configurando android.enableAapt2=false en su archivo gradle.properties y reiniciando el daemon de ./gradlew --stop ejecutando ./gradlew --stop from the línea de comando.

Guía oficial de la androidstudio.googleblog.com/2017/06/…


También puede probar @Config(manifest = "<projectFolder>/src/main/AndroidManifest.xml") en el caso de que no pueda simplemente incluir los recursos ya que algunas pruebas de proyectos fallarán con eso incluido.


Como lo mencionó un ingeniero del equipo de Google (posiblemente Xavier Ducrohet ), Robolectric tiene problemas con AAPT2:

Robolectric no es compatible con aapt2.

Dos opciones aquí.

Primera opción: siga las directrices de Robolectric para Android Studio 3.0+

Agregue lo siguiente a su build.gradle:

android { testOptions { unitTests { includeAndroidResources = true } } }

Anota tu prueba con el corredor de prueba Robolectric:

@RunWith(RobolectricTestRunner.class) public class SandwichTest { }

Segunda opción: desactive AAPT2 agregando la siguiente línea en el archivo gradle.properties :

android.enableAapt2=false