Как получить resultCode, отправленный с сервиса на Robolectric - PullRequest
0 голосов
/ 24 апреля 2020

Я тестирую сервис. Идея обычная: действие вызывает службу, давая ей ожидающее намерение, служба отправляет намерение обратно активности вместе с дополнительными данными и resultCode следующим образом:

    Intent intent = new Intent().putExtra(TheService.SOME_REPLY, reason);
    pi.send(service, TheService.SOME_RESULT, intent);

Я могу получить дополнительное с помощью вызов shadowService.peekNextStartedActivity(), но как насчет resultCode? Как и где я могу получить его?

    Intent intent = new Intent(ApplicationProvider.getApplicationContext(), TheService.class)
            .setAction(action)
            .putExtra(TheService.EXTRA_PI, pi);

    service.onHandleIntent(intent);

    ShadowService shadowService = Shadows.shadowOf(service);
    Intent intent2 = shadowService.peekNextStartedActivity();
    assertNotNull(error, intent.getExtras());
    Object reply = intent.getExtras().getParcelable(TheService.SOME_REPLY);
    assertNotNull(reply);
    assertTrue(reply instanceof SomeReply);
    // ... etc.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

Ну, Robolectri c система теней работает как шарм.

Я добавил новый класс теней:

@Implements(PendingIntent.class)
public class ShadowPendingIntent extends org.robolectric.shadows.ShadowPendingIntent {
    private int code;

    public int getCode() {
        return code;
    }

    @Override
    @Implementation
    protected void send(Context context, int code, Intent intent, PendingIntent.OnFinished onFinished, Handler handler, String requiredPermission, Bundle options) throws PendingIntent.CanceledException {
        this.code = code;
        super.send(context, this.code, intent, onFinished, handler, requiredPermission, options);
    }
}

Затем использовал его в тесте с аннотацией:

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowPendingIntent.class})
public class TestXxx {

И, наконец, проверьте это в тесте:

    ShadowPendingIntent spi = (ShadowPendingIntent) Shadows.shadowOf(pi);
    assertEquals(TheService.SOME_REPLY, spi.getCode());

Вуаля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...