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

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

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)); 

Это не удалось, поскольку в моем тестовом коде нет дополнительного key данных.

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

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

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

Если вы извлеките метод 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)); } 

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

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

Или assertEquals?