首页 > 解决方案 > Espresso 测试随机失败,可能是时间问题

问题描述

我有一些测试似乎只有在我第一次运行它们时才会失败,这里是其中一个示例;

class OptionDialogTest {
    @get:Rule
    val activityScenarioRule = activityScenarioRule<MainActivity>()

    @Test
    fun optionDialogTest() {
        val selected = R.string.manage_categories
        var dialog: OptionDialog? = null
        activityScenarioRule.scenario.onActivity { activity: MainActivity? ->
            dialog = OptionDialog("test", "test", arrayOf(R.string.drawer_categories,selected), activity as Context)
            dialog!!.setConfirm { _, _ -> }
            dialog!!.show()
        }
        onView(withId(R.id.custom)).perform(click()) //this line sometimes doesn't execute causing the test to fail, presumably it doesn't execute in time.
        onView(withText(R.string.manage_categories)).inRoot(isPlatformPopup()).perform(click())
        onView(withText(R.string.Yes)).inRoot(isDialog()).perform(click())
        assertEquals(dialog!!.getSelected(), selected)
    }
    
}

android studio给出的错误是;Waited for the root of the view hierarchy to have window focus and not request layout for 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus.

我唯一的猜测是某些代码没有以完全异步的方式执行。我不知道其他开发人员是否经历过随机测试失败,或者我将如何解决这个问题。

任何帮助或想法表示赞赏。

标签: androidandroid-espresso

解决方案


推荐阅读