Подтвердить что ты не робот

Как использовать robolectric для тестирования, начинающегося с дополнительных данных

В своем действии я начал новый Intent с некоторыми случайными дополнительными данными:

Intent newIntent = new Intent(this, UserActivity.class);
newIntent.putExtra("key", generateRandomKey());
startActivity(newIntent);

Я протестировал его так:

Intent intent = new Intent(myactivity, UserActivity.class);
Assert.assertThat(activity, new StartedMatcher(intent));

Не удалось, так как intent в моем тестовом коде не содержит дополнительных данных key.

Так как key является случайным, трудно предоставить один и тот же ключ. Поэтому я просто хочу проверить, соответствует ли целевой класс намерению UserActivity, но не нашел способа сделать это.

Есть ли решение?

4b9b3361

Ответ 1

Если вы извлеките метод generateRandomKey() в отдельный класс, вы можете вставить (как вручную, так и используя что-то вроде RoboGuice) контролируемую версию этого класса в свой тест, чтобы "случайный" ключ, сгенерированный при запуске Robolectric известное значение. Но все же случайный в производственном коде.

Затем вы можете поймать намерение, которое ваша деятельность создает и тестирует, если "ключ" содержит ожидаемое тестовое значение.


Однако, чтобы ответить на ваш вопрос напрямую...

Когда я тестирую, было ли сгенерировано намерение (в этом случае нажатие кнопки) и указывает на правильную цель, я использую

public static void assertButtonClickLaunchesActivity(Activity activity, Button btn, String targetActivityName) {
    btn.performClick();
    ShadowActivity shadowActivity = shadowOf(activity);
    Intent startedIntent = shadowActivity.getNextStartedActivity();
    ShadowIntent shadowIntent = shadowOf(startedIntent);
    assertThat(shadowIntent.getComponent().getClassName(), equalTo(targetActivityName));
}

Ответ 2

Что-то вроде этого?

Assert.assertTrue(UserActivity.class.equals(intent.getComponent().getClassName()));

или assertEquals?