Има ли начин да поставите на пауза и възобновите активността по време на тест за еспресо?

Това, което искам да направя, е много просто, просто искам да тествам моята IllegalState (по време на ангажиране на фрагмент) логика зад моите дейности. Искам да сложа на пауза дейността, да се опитам да ангажирам фрагмент и след това да потвърдя, че се справям правилно.

Но изглежда не е възможно действително да направите пауза и след това да възобновите активността по време на тестове за еспресо. Има ли начин да направите това, без да стартирате друга дейност?


person Max Fratane    schedule 15.05.2020    source източник


Отговори (2)


Куинтин е прав в отговора си, за да ви насочи към ActivityScenario.moveToState(newState:), но му липсват някои подробности, които се надявам да попълня тук.

Преди всичко имайте предвид, че ActivityScenario.launch(activityClass:) методът не само стартира дейността, но и изчаква завършването на нейните преходи в състоянието на жизнения цикъл. Така че, освен ако не се обаждате на Activity.finish() в методите за събития от жизнения цикъл на вашата дейност можете да приемете, че е в ВЪЗОБНОВЕН до момента, в който ActivityScenario.launch(activityClass:) методът връща.

Второ, след като активността ви бъде стартирана и в ВЪЗОБНОВЕН състояние, след което го преместете обратно в СТАРТИРАНО състояние действително ще доведе до метода onPause() на вашата дейност Наречен. По същия начин преместете дейността обратно в състояние СЪЗДАДЕНО , ще предизвика своите onPause() и onStop() методи, които да бъдат извикани.

Трето, след като преместите активността обратно в СЪЗДАДЕНО или ЗАПОЧНАТО състояние, трябва да преместете го напред в състояние ВЪЗОБНОВЕН, преди да можете изпълнете твърдения за преглед и действия за преглед върху него, или в противен случай вашият тестов метод ще изведе 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

Можете да опитате ActivityScenario, но те не включват Pause като държава. Може да се измъкнете с recreate() метод, но това е Пауза и Възобновява се.

    //possibly:
    // @get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>()

    val scenario = ActivityScenario.launch(MyActivity::class.java)
    scenario.moveToState(Lifecycle.State.RESUMED)
    //...
    scenario.recreate()
    //...

Бих предложил да имате някакъв интерфейс/абстрактен манипулатор, който можете да тествате единица извън контекста на Android.

person Quintin Balsdon    schedule 03.12.2020