@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
}
2条答案
按热度按时间z18hc3ub1#
Quintin在his answer中正确地指出了ActivityScenario.moveToState(newState:)方法,但是他缺少一些细节,我希望在这里补充。
首先,请注意ActivityScenario.launch(activityClass:)方法不仅会启动Activity,还会等待其生命周期状态转换完成。因此,除非您在Activity的生命周期事件方法中调用Activity.finish(),否则您可以假设Activity在ActivityScenario.launch(activityClass:)方法返回时处于RESUMED状态。
其次,一旦Activity启动并处于RESUMED状态,将其移回STARTED状态实际上会导致调用Activity的onPause()方法;同样,将Activity移回CREATED状态也会导致调用其onPause()和onStop()方法。
第三,一旦您将活动移回CREATED或STARTED状态,您必须将其移回RESUMED状态,然后才能在其上执行视图Assert和视图操作,否则您的测试方法将抛出NoActivityResumedException。
所有上述内容总结在以下试验方法中:
要查看实际操作,请参考this示例应用程序,特别是this测试类。
xt0899hw2#
您可以尝试ActivityScenario,但它们不包括
Pause
作为状态。您可能会使用recreate()
方法,但那是暂停和恢复。我建议使用一些接口/抽象处理程序,以便您可以在Android上下文之外进行单元测试。