测试 RecyclerView 是否有 Espresso 数据
Testing RecyclerView if it has data with Espresso
我需要编写一个测试来点击,比方说我的 RecyclerView 中的第一个项目。在某些情况下,RecyclerView 将是空的,因此如果我单击具有 0
索引的位置,它将失败。我该如何编写这样的测试?要先检查recyclerView
是否为空再点击具体位置?
问题和评论中的场景略有不同。
让我们来实现下一个测试场景:
如果回收站视图不包含任何内容,则什么也不做。如果回收站视图至少有一个元素,请单击第一个。
@Rule
public final ActivityTestRule<YourActivity> mActivityRule = new ActivityTestRule<>(YourActivity.class);
@Test
public void testSample(){
if (getRVcount() > 0){
onView(withId(R.id.our_recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
}
}
private int getRVcount(){
RecyclerView recyclerView = (RecyclerView) mActivityRule.getActivity().findViewById(R.id.our_recycler_view);
return recyclerView.getAdapter().getItemCount();
}
对于你的情况,我认为最好用check方法检查一下。下面给出一个例子。
@Test
fun mainActivityTest() {
val yourRecycler = onView(
allOf(
childAtPosition(
withClassName(`is`("androidx.constraintlayout.widget.ConstraintLayout")),
0
),
instanceOf(RecyclerView::class.java)
)
)
yourRecycler.check { view, noViewFoundException ->
noViewFoundException?.apply {
throw this
}
assertTrue(view is RecyclerView &&
view.adapter != null && view.adapter?.itemCount?:-1 > 0
)
}
}
我需要编写一个测试来点击,比方说我的 RecyclerView 中的第一个项目。在某些情况下,RecyclerView 将是空的,因此如果我单击具有 0
索引的位置,它将失败。我该如何编写这样的测试?要先检查recyclerView
是否为空再点击具体位置?
问题和评论中的场景略有不同。
让我们来实现下一个测试场景: 如果回收站视图不包含任何内容,则什么也不做。如果回收站视图至少有一个元素,请单击第一个。
@Rule
public final ActivityTestRule<YourActivity> mActivityRule = new ActivityTestRule<>(YourActivity.class);
@Test
public void testSample(){
if (getRVcount() > 0){
onView(withId(R.id.our_recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
}
}
private int getRVcount(){
RecyclerView recyclerView = (RecyclerView) mActivityRule.getActivity().findViewById(R.id.our_recycler_view);
return recyclerView.getAdapter().getItemCount();
}
对于你的情况,我认为最好用check方法检查一下。下面给出一个例子。
@Test
fun mainActivityTest() {
val yourRecycler = onView(
allOf(
childAtPosition(
withClassName(`is`("androidx.constraintlayout.widget.ConstraintLayout")),
0
),
instanceOf(RecyclerView::class.java)
)
)
yourRecycler.check { view, noViewFoundException ->
noViewFoundException?.apply {
throw this
}
assertTrue(view is RecyclerView &&
view.adapter != null && view.adapter?.itemCount?:-1 > 0
)
}
}