Мне казалось, что я достиг дна, пытаясь найти решение, как я могу проверить, что мой ImageButton имеет определенный фон, который можно рисовать в моем тесте Espresso. Но я продолжаю получать сообщение об ошибке, которое я вставил ниже. Я предоставил как можно больше кода, который я считал подходящим.
ImageButton
<ImageButton
android:id="@+id/image_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_background_selector"
android:clickable="true"
android:src="@drawable/background" />
Selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_background_error" android:state_activated="true" />
<item android:drawable="@drawable/ic_background_okay" android:state_activated="false" />
</selector>
Custom Matcher:
fun matchColor(expectedId: Int): Matcher<View> {
return object : BoundedMatcher<View, ImageButton>(ImageButton::class.java) {
override fun describeTo(description: Description?) {
description?.appendText("with text color: ")
description?.appendValue(expectedId)
}
override fun matchesSafely(item: ImageButton?): Boolean {
return item?.context?.resources?.getDrawable(expectedId)?.constantState == item?.drawable?.constantState
}
}
}
Тест:
onView(withId(R.id.image_button)).check(matches(matchColor(R.drawable.ic_background_okay)))
Я получаю следующую ошибку:
androidx.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'with text
color: <2131165331>' doesn't match the selected view. Expected: with text color:
<2131165331>Got: "AppCompatImageButton{id=2131296363, ...}