2012-09-20 16 views
17

In un'attività, ho iniziato un nuovo Intent con un po 'a caso i dati in più:Come utilizzare robolectric per testare iniziato intenti con dati aggiuntivi

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

ho provato in questo modo:

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

E' non riuscito perché il intent nel mio codice di test non ha dati aggiuntivi key.

Poiché lo key è casuale, è difficile fornire una stessa chiave. Quindi voglio solo verificare se la classe target dell'intento è UserActivity, ma non ho trovato alcun modo per farlo.

C'è una soluzione?

risposta

22

Se si estrae il metodo generateRandomKey() in una classe separata, è possibile quindi iniettare (manualmente o utilizzando qualcosa come RoboGuice) una versione controllata di tale classe nel test in modo che la chiave "casuale" generata durante l'esecuzione di Robolectric sia in realtà un valore noto. Ma è ancora casuale nel codice di produzione.

È quindi possibile rilevare l'intento che l'attività crea e verificare se "chiave" contiene il valore di test previsto.


Tuttavia, per rispondere alla tua domanda direttamente ...

Quando sto testando se l'intento è stato generato (in questo caso da un clic del pulsante) ed è rivolto al target corretto uso

+0

Grazie, questo è davvero utile! – Freewind

1

Qualcosa di simile?

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

o assertEquals?

Problemi correlati