Robolectric и IntentServices

Используя Robolectric, как можно протестировать IntentService, который передает намерения в качестве ответа?

Предполагая следующий класс:

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

В моем тестовом случае я пытаюсь сделать что-то вроде этого:

@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 никогда не запускается с использованием этого подхода. Я относительно новичок в Robolectric, поэтому, вероятно, упускаю что-то очевидное. Есть ли какая-то привязка, которую я должен сделать перед вызовом startService? Я проверил, что вещание работает, просто вызвав sendBroadcast в контексте. Любые идеи?

14
задан pbaumann 2 August 2012 в 23:29
поделиться