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