Попытка проверить наличие диалогового окна во время инициализации базы данных. Процесс инициализации отмечен 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())
}
Не могу разобрать большую часть logcat. Может поделиться, если нужно.
Я недавно перешел на androidx.test.rule.ActivityTestRule
с ActivityInstrumentationTestCase2
, и мои тестовые отметки testCheckProgressBarShownOnBroadcast
. Работал нормально, когда я был на ActivityInstrumentationTestCase2
Ошибка keyDispatchTimeout
заставляет меня чувствовать, что я не выполняю тест правильно.
Редактировать
'Instrumentation run failed due to 'keyDispatchingTimedOut''
выбрасывается при попытке взаимодействия с пользовательским интерфейсом. В противном случае, это идет к ANR. onView
, вероятно, заходит в тупик.