Тестирование инструментария Android как определить, является ли текущая активность домашним экраном (Launcher)?

#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());
    }