У меня есть тест инструмента, в котором есть четыре выражения соответствия. Есть одно из четырех утверждений, которое не выполняется при запуске с тремя другими, но проходит, если оно выполняется само по себе.
вот тест, который не прошел
@Test
fun displayTypeFilteredPokemon(){
// When - PokemonList fragment launch and filtered by specific type
launchActivity()
onView(withId(R.id.genAllButton)).perform(click())
// Perform click action to do the filter on specific type
onView(withId(R.id.menu_filter)).perform(click())
onView(withText(R.string.label_type_electric)).perform(click())
// Then - Verify the list is filtered by the selected type
onView(withId(R.id.pokemon_list)).check(RecyclerViewItemCountAssertion(3))
onView(withText("Magnemite")).check(matches(isDisplayed()))
onView(withText("Jolteon")).check(matches(isDisplayed()))
onView(withText("Emolga")).check(matches(isDisplayed()))
}
вот код активности запуска:
private fun launchActivity(): ActivityScenario<PokemonListActivity>? {
val scenario = launch(PokemonListActivity::class.java)
scenario.onActivity {
val intent = Intent()
intent.putExtra("genId",0)
it.intent = intent
}
return scenario
}
А вот код пользовательского сопоставления:
class RecyclerViewItemCountAssertion(private val matcher: Int) : ViewAssertion {
override fun check(view: View?, noViewFoundException: NoMatchingViewException?) {
if(noViewFoundException != null){
throw noViewFoundException
}
val recyclerView = view as RecyclerView
val adapter = recyclerView.adapter!!
assertThat(adapter.itemCount, IsEqual(matcher))
}
}
при использовании этого набора совпадений он проходит:
onView(withId(R.id.pokemon_list)).check(RecyclerViewItemCountAssertion(3))
onView(withText("Jolteon")).check(matches(isDisplayed()))
onView(withText("Emolga")).check(matches(isDisplayed()))
или когда этот набор совпадений также проходит:
onView(withText("Magnemite")).check(matches(isDisplayed()))
вот проверяемое представление:

Я немного сбит с толку, потому что вид явно содержит соответствующий текст. Может быть, ресурс не работает, тест просто закрывается? Например, причина, по которой тест, состоящий только из одних проходов, связан с тем, что он достаточно быстр, чтобы соответствовать до его завершения?
Я думал о введении EspressoIdlingResource, но я прочитал, что это создает трудности в кодовой базе, и я хотел бы, чтобы это было просто для целей обучения. проблема в том, что когда я отлаживаю тест, он проходит. Когда я просто запускаю тест, он терпит неудачу.
Редактировать 1: при запуске всего теста сам по себе ошибок нет. При запуске всех тестов в классе я получаю следующую ошибку:
androidx.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.stegner.androiddex:id/menu_filter