2013-08-12 13 views
7

Mam aplikację, która uruchamia określone działanie, jeśli używany jest określony adres URL ze schematem niestandardowym. Na przykład, jeśli "myscheme: //www.myapp.com/mypath" jest używane w widoku internetowym, moja aplikacja jest uruchamiana. Aby to zrobić, należy skonfigurować filtry woli w manifeście jako tak:Puszka (powinna) być używana do testowania filtra 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> 

Chciałbym sprawdzić, czy to działa i kontynuuje pracę przez pisanie testów jednostkowych.

@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()); 
} 

To jednak nie działa. Otrzymuję "shadowIntent.getComponent()" zwraca null, kiedy powinien zwrócić komponent, który określa moją aplikację i działanie. Ponieważ większość tej pracy jest wykonywana przez system Android, a nie przez moją aplikację, można założyć, że Robolectric nie naśladuje tego, a więc nie można go wykorzystać do przetestowania tej funkcji? Czy mam rację, zakładając, że mogę/powinienem wystawić test jednostkowy na pogodę, że mój manifest jest poprawnie skonfigurowany?

Dzięki.

Odpowiedz

0

Nie przetestowałbym go w ten sposób. Zasadniczo testujesz część Androida.

Chciałbym mieć jeden test, który jest ty AndroidManifest.xml deklaracja jest poprawna. I miałbym jeden/dwa test sprawdzający, czy twoja aktywność obsługuje cel z poprawnymi danymi

Powiązane problemy