Тестирование 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());
    }
Другие вопросы по тегам