2013-08-12 8 views
7

Ho un'app che avvia un'attività specifica se viene utilizzato un determinato URL con uno schema personalizzato. Ad esempio, se "myscheme: //www.myapp.com/mypath" viene utilizzato in una visualizzazione Web, viene avviata la mia app. Per fare questo, a configurare filtri intenti nel manifesto come così:Can (dovrebbe) robolectric essere utilizzato per testare il filtro Intent

<intent-filter> 
    <action android:name="android.intent.action.View" /> 
    <data android:scheme="myscheme" android:host="www.myapp.com" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

mi piacerebbe verificare che questo funziona e continua a lavorare, scrivendo una prova di unità.

@Test 
public void testIntentHandling() 
{ 
    Activity launcherActivity = new Activity(); 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("myscheme://www.myapp.com/mypath")); 
    launcherActivity.startActivity(intent); 

    ShadowActivity shadowActivity = Robolectric.shadowOf(launcherActivity); 
    Intent startedIntent = shadowActivity.getNextStartedActivity(); 
    ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent); 
    assertNotNull(shadowIntent); 
    System.out.println(shadowIntent.getAction()); 
    System.out.println(shadowIntent.getData().toString()); 
    System.out.println(shadowIntent.getComponent().toShortString()); 

    assertEquals("com.mycompany", shadowIntent.getComponent().getPackageName()); 
} 

Tuttavia, questo non funziona. Quello che ottengo è "shadowIntent.getComponent()" restituisce null, quando deve restituire il componente che specifica la mia applicazione e attività. Poiché la maggior parte di questo lavoro è eseguita dal sistema Android, non dalla mia app, è giusto supporre che Robolectric non lo imiti e quindi non può essere utilizzato per testare questa funzione? Ho ragione di presumere che posso/devo testare l'unità meteo il mio manifest è configurato correttamente?

Grazie.

risposta

0

Non lo testerei in questo modo. Stai praticamente testando parte di Android.

Avrei una prova che sei la dichiarazione AndroidManifest.xml corretta. E avrei uno/due test che stanno verificando che la tua attività gestisca correttamente l'intento con i dati