2012-09-20 13 views
17

En una actividad, empecé una nueva Intención con un poco al azar de datos adicionales:Cómo utilizar robolectric para poner a prueba comenzó intención con datos adicionales

Intent newIntent = new Intent(this, UserActivity.class); 
newIntent.putExtra("key", generateRandomKey()); 
startActivity(newIntent); 

he comprobado como esto:

Intent intent = new Intent(myactivity, UserActivity.class); 
Assert.assertThat(activity, new StartedMatcher(intent)); 

¡Es Falló porque el intent en mi código de prueba no tiene datos adicionales key.

Como el key es aleatorio, es difícil proporcionar la misma clave. Así que solo quiero probar si la clase objetivo del intento es UserActivity, pero no encontré la manera de hacerlo.

¿Hay una solución?

Respuesta

22

Si extrae el método generateRandomKey() en una clase separada, puede inyectar (manualmente o usando algo como RoboGuice) una versión controlada de esa clase en su prueba para que la clave 'aleatoria' generada cuando se ejecuta Robolectric en realidad un valor conocido. Pero todavía es aleatorio en el código de producción.

A continuación, puede coger la intención crea su actividad y prueba si 'clave' contiene el valor de la prueba prevista.


Sin embargo, para responder a su pregunta directamente ...

Cuando estoy probando se ha generado una intención (en este caso por un clic de botón) y está señalando con el objetivo correcto uso

public static void assertButtonClickLaunchesActivity(Activity activity, Button btn, String targetActivityName) { 
    btn.performClick(); 
    ShadowActivity shadowActivity = shadowOf(activity); 
    Intent startedIntent = shadowActivity.getNextStartedActivity(); 
    ShadowIntent shadowIntent = shadowOf(startedIntent); 
    assertThat(shadowIntent.getComponent().getClassName(), equalTo(targetActivityName)); 
} 
+0

¡Gracias, esto es realmente útil! – Freewind

1

Algo como esto?

Assert.assertTrue(UserActivity.class.equals(intent.getComponent().getClassName())); 

o assertEquals?

Cuestiones relacionadas