Тестирование Android Инструментарий, как определить, является ли текущая активность домашним экраном (Launcher)? - PullRequest
1 голос
/ 10 ноября 2011

Я пытаюсь протестировать функцию приложения с помощью Robotium. Одна из особенностей заключается в том, что когда моя начальная активность запускается из представления поверх стека активности, она должна очистить верхнюю часть стека и повторно использовать существующую активность, например («MainActivity»).

Поток:

Первый Экран -> Экран LoginActivity -> Экран регистрации -> Первый Экран

Решение достаточно простое:

   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 Ответ

0 голосов
/ 17 января 2012

Я смог решить эту проблему, используя 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());
    }
...