首页 > 解决方案 > 如何检查 recyclerView 是否为空 Espresso

问题描述

如何使用 espresso 检查我的 recyclerview 是否为空?

我知道我可以通过单击元素位置来检查它是否有元素,但我想通过检查它是否为空来开始我的测试。

@RunWith(AndroidJUnit4ClassRunner::class)
class TagsFragmentTest {
    @Rule
    @JvmField
    var repeatRule: RepeatRule = RepeatRule()

    @get:Rule
    var activityScenarioRule = activityScenarioRule<LoginActivity>()

    @Test
    @RepeatTest(1)
    fun test_checkTags() {
        //check main activity
        Thread.sleep(5000);
        onView(withId(R.id.mainFragmentManager)).check(matches(isDisplayed()))
        //go to Tags fragment
        onView(withId(R.id.nav_tags)).check(matches(isDisplayed()))
        onView(withId(R.id.nav_tags)).perform(click())

       //CHECK MY RECYCLERVIEW IS EMPTY
       //ADD TAGS
       //CHECK IF HAS TAGS
    }

}

标签: javaandroiduser-interfacekotlinandroid-espresso

解决方案


我创建了一个自定义 ViewMatcher:

fun recyclerViewSizeMatcher(matcherSize: Int): Matcher<View?>? {
    return object : BoundedMatcher<View?, RecyclerView>(RecyclerView::class.java) {
        override fun describeTo(description: Description) {
            description.appendText("with list size: $matcherSize")
        }

        override fun matchesSafely(recyclerView: RecyclerView): Boolean {
            return matcherSize == recyclerView.adapter!!.itemCount
        }
    }
}

检查是否adapter.itemCount有传递的元素。

您可以将其用作:

recyclerViewSizeMatcher(0)

在这种情况下,它必须为空(0 个元素)。


推荐阅读