Тестирование Android Инструментарий, как определить, является ли текущая активность домашним экраном (Launcher)?
Я пытаюсь протестировать функцию приложения с помощью Robotium. Одна из особенностей заключается в том, что когда моя начальная активность запускается из представления поверх стека активности, она должна очистить верхнюю часть стека и повторно использовать существующую активность Activity ("MainActivity").
Поток:
Первый Экран -> LoginActivityScreen -> Регистрационный Экран -> Первый Экран
Решение достаточно простое:
Intent intent = new Intent(getBaseContext(), FirstScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Установив флаг Intent.FLAG_ACTIVITY_CLEAR_TOP, вы помещаете FirstScreen обратно на вершину стека моего приложения.
Тест, который я пытаюсь написать, состоит в том, чтобы подтвердить, что при нажатии кнопки "Назад" оборудования приложение перестает работать, а исходное приложение Home(Launcher) является текущей активностью.
My Instrumentation TestCase:
@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. Я доверяю ОС 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());
}