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.