Robolectric und IntentServices

Mit Robolectric, wie würde man das testen ein IntentService, dass die Sendungen Absichten als Antwort?

Vorausgesetzt, die folgenden Klasse:

class MyService extends IntentService {
    @Override
    protected void onHandleIntent(Intent intent) {
        LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("action"));
    }
}

In meinem test-Fall, ich bin versucht zu tun so etwas wie dieses:

@RunWith(RobolectricTestRunner.class)
public class MyServiceTest{
    @Test
    public void testPurchaseHappyPath() throws Exception {

        Context context = new Activity();

        //register broadcast receiver
        BroadcastReceiver br = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                //test logic to ensure that this is called
            }

        };
        context.registerReceiver(br, new IntentFilter("action"));

        //This doesn't work
        context.startService(new Intent(context, MyService.class));

    }

}

MyService wird nie gestartet, mit diesem Ansatz. Ich bin relativ neu auf Robolectric, also ich bin wahrscheinlich etwas fehlt offensichtlich. Gibt es irgendeine Art von Bindung, die ich zu tun haben, vor dem Aufruf von startService? Ich habe festgestellt, dass Rundfunk arbeitet und einfach mitgehen sendBroadcast auf den Kontext an. Irgendwelche Ideen?

  • Ich habe nicht eine konkrete Lösung für dich aber ich glaube, dass Sie zu verhöhnen, die broadcast-receiver mit mockito nennen zu können onReceive in dir-code. Oder der einfachere Weg wäre, zu extrahieren, die Logik von onReceive in einen separaten test-Fall.
  • Der broadcast receiver ist wirklich gut arbeiten. Wie gesagt, am Ende der post oben aufrufenden Kontext.sendBroadcast bekommt in onReceive. Es ist die service-Initialisierung, die ich nicht sehen, geschieht.
  • hast du eine Lösung finden? Ich stehe vor dem gleichen problem versuchen zu testen, ein IntentService
InformationsquelleAutor pbaumann | 2012-07-26
Schreibe einen Kommentar