Квинтин прав в своем ответе, чтобы указать вам на ActivityScenario.moveToState(newState:), но ему не хватает некоторых деталей, которые я надеюсь заполнить здесь.
Прежде всего, обратите внимание, что ActivityScenario.launch(activityClass:) не только запускает действие, но и ожидает завершения переходов состояния его жизненного цикла. Итак, если вы не вызываете Activity.finish() в методах событий жизненного цикла вашей активности вы можете предположить, что он находится в RESUMED на момент ActivityScenario.launch(activityClass:).
Во-вторых, как только ваша активность запущена и в RESUMED, а затем вернуть его в состояние STARTED. фактически приведет к тому, что метод вашей активности onPause() будет называется. Аналогично, возврат действия в состояние СОЗДАНО. , вызовет как его onPause(), так и onStop(), которые необходимо вызвать.
В-третьих, после того как вы вернули действие обратно в СОЗДАНО или STARTED, вы должны переместите его в состояние 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
}
Чтобы увидеть это в действии, обратитесь к этому примеру приложения и этого тестового класса в частности.
person
Adil Hussain
schedule
04.12.2020