如何在 Compose 中重启 Espresso 测试?

问题描述 投票:0回答:0

如果失败,我正在尝试重新开始我的测试。我创建了一个规则,它正在执行,但问题出在应用程序上。我必须手动重新启动它。目前,我可以杀死它,但不知道如何重新启动它。

规则代码:

class RetryFailedTestRule(retryCount: Int = 1) : TestRule {

private val timesToRunTestCount = retryCount + 1

override fun apply(base: Statement, description: Description): Statement {
    return statement(base, description)
}

private fun statement(base: Statement, description: Description): Statement {
    return object : Statement() {

        override fun evaluate() {
            for (runCount in 1..timesToRunTestCount) {
                try {
                    println("--> Attempt #$runCount")
                    base.evaluate()
                    println("--> Success at #$runCount")
                    break
                } catch (t: Throwable) {
                    if (runCount == timesToRunTestCount) {
                        println("<-- Attempt #$runCount failed. No more attempts.")
                        throw t
                    }
                    System.err.println(
                        "${description.methodName}: test failed on run: `$runCount`." +
                                " Will run a maximum of `$timesToRunTestCount` times."
                    )
                    println("<-- Attempt #$runCount failed. Repeating.")
                    finishOnUiThread()
                }
            }
        }
    }
}

重启代码:

@OptIn(ExperimentalPermissionsApi::class)
private fun finishOnUiThread() {
    val instrumentation = InstrumentationRegistry.getInstrumentation()

    instrumentation.runOnMainSync {
        finishActivity()
    }
    instrumentation.waitForIdleSync()

    ActivityScenario.launch(AppActivity::class.java)
}

private fun finishActivity() {
    println("RetryFailedTestRule finishActivity")
    val activities: MutableList<Activity> = ArrayList()

    for (stage in EnumSet.range(Stage.CREATED, Stage.STOPPED)) {
        activities.addAll(
            ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(stage)
        )
    }

    for (activity in activities) {
        println("RetryFailedTestRule list of activities $activities")
        if (!activity.isFinishing) {
            try {
                activity.finish()
            } catch (e: RuntimeException) {
                println("Failed to finish activity")
            }
        }
    }
}

所以它完成了应用程序,但无法像测试前一样启动它。我已经为旧 UI 尝试了不同的东西,但这些都不适用于 Compose。还有其他方法吗?

android android-jetpack-compose android-espresso
© www.soinside.com 2019 - 2024. All rights reserved.