有没有办法在 Espresso 测试期间暂停和恢复活动?

Max*_*ane 6 android kotlin android-espresso

我想做的非常简单,我只想测试我的活动背后的 IllegalState (在片段提交期间)逻辑。我想暂停活动,尝试提交一个片段,然后断言我处理得正确。

但在 Espresso 测试期间似乎不可能真正暂停然后恢复活动。有没有办法在不启动其他活动的情况下做到这一点?

Adi*_*ain 9

Quintin 在他的回答中正确地指出了ActivityScenario.moveToState(newState:)方法,但他遗漏了一些我希望在这里填写的细节。

首先,请注意ActivityScenario.launch(activityClass:)方法不仅启动 Activity,而且等待其生命周期状态转换完成。因此,除非您在 Activity 的生命周期事件方法中调用Activity.finish(),否则您可以假设在ActivityScenario.launch(activityClass:)方法返回时它处于RESUMED状态。

其次,一旦您的 Activity 启动并处于RESUMED状态,那么将其移回STARTED状态实际上会导致您的 Activity 的onPause()方法被调用。同样,将活动移回CREATED状态将导致调用其onPause()onStop()方法。

第三,一旦您将活动移回CREATEDSTARTED状态,您必须先将其移至RESUMED状态,然后才能对其执行视图断言和视图操作,否则您的测试方法将抛出NoActivityResumedException

以上所有内容总结为以下测试方法:

@Test
fun moving_activity_back_to_started_state_and_then_forward_to_resumed_state() {
    val activityScenario = ActivityScenario.launch(MyActivity::class.java)

    // the activity's onCreate, onStart and onResume methods have been called at this point

    activityScenario.moveToState(Lifecycle.State.STARTED)

    // the activity's onPause method has been called at this point

    activityScenario.moveToState(Lifecycle.State.RESUMED)

    // the activity's onResume method has been called at this point
}
Run Code Online (Sandbox Code Playgroud)

要查看实际效果,请特别参考示例应用程序和此测试类。