【问题标题】:Android unit test with ActivityInstrumentationTestCase2, getActivity() hangs when previous test case causes another Activity to be launched使用 ActivityInstrumentationTestCase2 进行 Android 单元测试,当前一个测试用例导致另一个 Activity 启动时,getActivity() 挂起
【发布时间】:2012-07-27 18:27:33
【问题描述】:

我正在尝试使用 ActivityInstrumentationTestCase2 为登录 Activity 运行多个测试用例。第一个测试用例测试登录成功,这会导致 Activity 通过调用 startActivity(Intent intent) 启动下一个 Activity。现在,在我要测试的 Activity 之上还有另一个 Activity。第一个测试用例通过,启动第二个测试用例。但是,当它被第二个测试用例调用时,它将永远挂在 getActivity() 处。

如果我进入我的登录Activity的代码并注释掉调用startActivity(Intent intent)的部分,那么两个测试用例都会成功运行。

我已经尝试了一些方法。我使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 来清除 Activity 堆栈。在这种情况下,top Activity 被关闭,并且 login Activity 被显示出来,但是当第二个测试用例启动时它仍然卡在 getActivity() 处。

我也尝试过发送Keys(KeyEvent.KEYCODE_BACK),但是没有效果。

我能做些什么来克服这个问题?谢谢!

【问题讨论】:

  • getInstrumentation().addMonitor(NextActivity.class.getName(), null, true);成功了!

标签: android junit android-activity


【解决方案1】:
getInstrumentation().addMonitor(NextActivity.class.getName(), null, true);

成功了。请注意,最后一个参数是一个标志,指示是否阻止活动启动。将其设置为 true 即可解决问题。

link to doc

【讨论】:

  • 你在哪里添加了这个调用?你能发布一个更完整的答案吗?
【解决方案2】:

在我的情况下,我只是在每个案例之后关闭活动:

public void tearDown() {
    // here goes other code to be executed after each test case
    getActivity().finish();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多