Android Instrumentation测试如何判断当前Activity是否为Home(Launcher)屏幕?

时间:2011-11-10 02:44:03

标签: android instrumentation launcher robotium

我正在尝试使用Robotium来测试应用程序功能。其中一个功能是,当我从活动堆栈顶部的视图启动我的初始活动时,它应该清除堆栈的顶部并重用现有的活动i.g。(“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放回应用程序堆栈的顶部。

我想写的测试是确认当按下硬件后退按钮时,应用程序就消失了,本机主页(启动器)应用程序就是当前活动。

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 :(得分:0)

我能够使用 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());
    }