#android #instrumentation #launcher #robotium
#Android #инструментарий #launcher #robotium
Вопрос:
Я пытаюсь протестировать функцию приложения с помощью Robotium. Одна из особенностей заключается в том, что когда мое первоначальное действие запускается из представления поверх стека действий, оно должно очистить верхнюю часть стека и повторно использовать существующее действие, например («MainActivity»).
Поток:
FirstScreen -> LoginActivityScreen -> RegistrationScreen -> FirstScreen
Решение достаточно простое:
Intent intent = new Intent(getBaseContext(), FirstScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Установив флаг Intent.FLAG_ACTIVITY_CLEAR_TOP возвращает FirstScreen обратно в начало стека моего приложения.
Тест, который я пытаюсь написать, заключается в подтверждении того, что при нажатии аппаратной кнопки возврата приложение отключается, а родное приложение Home (Launcher) является текущей активностью.
Мой тестовый набор инструментов:
@Smoke
public void testshouldBeOnLauncherHomeScreen() {
// Monitor the Home (Launcher) Activity being Launched
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
ActivityMonitor monitor = getInstrumentation().addMonitor(filter, null, false);
// go back to the launcher home
robotium.goBack();
assertEquals(1, monitor.getHits());
}
Я бы предпочел утверждать, что активность приложения Launcher является текущей активностью. Любые идеи или предложения будут высоко оценены.
Ответ №1:
Я смог решить это с помощью ActivityUnitTestCase, а не InstrumentationTestCase2 с помощью ActivityUnitTestCase. Я доверяю ОС Android вывести мой FirstScreen на первое место, добавив флаг. Подтверждения того, что флаг установлен при выдаче намерения запустить мой первый экран, достаточно, чтобы дать мне уверенность в том, что мой код выполняет то, что я ожидаю.
Public void testThatStartedIntentHasClearTopFlag() {
Activity activity startActivity(new Intent(), null, null);
activity.findViewById(R.id.button).performClick();
Intent intent = getStartedActivityIntent();
assertEquals(Intent.FLAG_ACTIVITY_CLEAR_TOP, intent.getFlags());
}