Android 测试未能运行到完成。原因:';由于';keyDispatchingTimedOut'';。查看设备日志以了解详细信息

Android 测试未能运行到完成。原因:';由于';keyDispatchingTimedOut'';。查看设备日志以了解详细信息,android,kotlin,android-espresso,android-testing,androidx,Android,Kotlin,Android Espresso,Android Testing,Androidx,正在尝试在初始化数据库时测试对话框的存在性。初始化过程由LocalBroadcasts标记 测试代码 private var listActivity: ListActivity? = null @get:Rule val activityTestRule = ActivityTestRule<ListActivity>(ListActivity::class.java) @Before fun setUp() { listActivity = activityTestR

正在尝试在初始化数据库时测试对话框的存在性。初始化过程由LocalBroadcasts标记

测试代码

private var listActivity: ListActivity? = null

@get:Rule
val activityTestRule = ActivityTestRule<ListActivity>(ListActivity::class.java)

@Before
fun setUp() {
    listActivity = activityTestRule.activity
}

@Test
fun testCheckActivityNotNull() {
    Assert.assertNotNull(listActivity)
}

/**
 * Test that we show a progress dialog while database init/migration is in process.
 * Test that we remove that on db init/migration success
 */
@UiThreadTest
@Test
fun testCheckProgressBarShownOnBroadcast() {
    Assert.assertNotNull(listActivity)

    var dbIntent = Intent()
    dbIntent.putExtra(DB_INIT_STATUS, DB_INIT_START)
    dbIntent.action = DB_INIT_STATUS
    LocalBroadcastManager.getInstance(ApplicationProvider.getApplicationContext()).sendBroadcast(dbIntent)

    Espresso.onView(withText(R.string.please_wait)).check(matches(isDisplayed()))
    Espresso.onView(withText(R.string.migrating_data)).check(matches(isDisplayed()))

    Thread.sleep(5000) // keeping a waiting time to check the view

    dbIntent = Intent()
    dbIntent.putExtra(DB_INIT_STATUS, DB_INIT_END)
    dbIntent.action = DB_INIT_STATUS
    LocalBroadcastManager.getInstance(ApplicationProvider.getApplicationContext()).sendBroadcast(dbIntent)

    Espresso.onView(withText(R.string.please_wait)).check(doesNotExist())
    Espresso.onView(withText(R.string.migrating_data)).check(doesNotExist())
}
私有变量listActivity:listActivity?=无效的
@获取:规则
val activityTestRule=activityTestRule(ListActivity::class.java)
@以前
趣味设置(){
listActivity=activityTestRule.activity
}
@试验
趣味testCheckActivityNotNull(){
Assert.assertNotNull(listActivity)
}
/**
*测试在数据库初始化/迁移过程中显示一个进度对话框。
*测试我们是否在db init/migration success上删除了它
*/
@超线程测试
@试验
有趣的testCheckProgressBarShownOnBroadcast(){
Assert.assertNotNull(listActivity)
var dbIntent=Intent()
dbIntent.putExtra(DB_INIT_STATUS,DB_INIT_START)
dbIntent.action=DB_INIT_STATUS
LocalBroadcastManager.getInstance(ApplicationProvider.getApplicationContext()).sendBroadcast(dbIntent)
Espresso.onView(带文本(R.string.please_wait)).check(匹配项(isDisplayed()))
Espresso.onView(带文本(R.string.migrating_data)).check(匹配项(isDisplayed()))
Thread.sleep(5000)//保持等待时间以检查视图
dbIntent=Intent()
dbIntent.putExtra(DB_INIT_STATUS,DB_INIT_END)
dbIntent.action=DB_INIT_STATUS
LocalBroadcastManager.getInstance(ApplicationProvider.getApplicationContext()).sendBroadcast(dbIntent)
Espresso.onView(带文本(R.string.please_wait)).check(doesnotextist())
Espresso.onView(带文本(R.string.migrating_data)).check(doesNotExist())
}
我看不懂那只logcat。如果需要,可以分享

我最近从
ActivityInstrumentationTestCase2
转到了
androidx.test.rule.ActivityTestRule
,我的测试开始于
testCheckProgressBarShownOnBroadcast
。我在
ActivityInstrumentationTestCase2上时工作正常

错误
keyDispatchTimeout
使我感觉测试不正确

编辑
“检测运行失败,因为在我尝试与UI交互时引发了“keyDispatchingTimedOut”
。否则,它将转到ANR。
onView
可能会陷入死锁。

您可以共享日志吗?