Android 当swipeRight在RecyclerView上运行时,为什么测试没有失败?

Android 当swipeRight在RecyclerView上运行时,为什么测试没有失败?,android,android-recyclerview,android-espresso,ui-testing,Android,Android Recyclerview,Android Espresso,Ui Testing,这里是我的xml和RecyclerView <androidx.recyclerview.widget.RecyclerView android:id="@+id/tradersRecyclerView" android:layout_width="0dp" android:layout_height="0dp" android:visibility="@{handler.tradersList.size > 0 ? View.VISIBLE : View.G

这里是我的xml和RecyclerView

<androidx.recyclerview.widget.RecyclerView
   android:id="@+id/tradersRecyclerView"
   android:layout_width="0dp"
   android:layout_height="0dp"
   android:visibility="@{handler.tradersList.size > 0 ? View.VISIBLE : View.GONE}"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toBottomOf="@+id/tradersToolBar"        
   tools:listitem="@layout/trader_list_item" />

仅当向左滑动时,子项才会显示。向右滑动时不会发生任何事情

这里是浓缩咖啡的测试,检查swipeLeft是否有效

 @Test
 fun scroll_itemList_swipeLeft() {
    // scroll
    onView(withId(R.id.tradersRecyclerView))
                .perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
    // swipe
    onView(withId(R.id.tradersRecyclerView))
                .perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
 }
@测试
趣味卷轴\u项目列表\u swipeLeft(){
//卷轴
onView(带id(R.id.tradersRecyclerView))
.执行(RecycleServiceActions.scrollToPosition(checkItemCount));
//刷
onView(带id(R.id.tradersRecyclerView))
.perform(RecycleServiceActions.ActionOnItemPosition(checkItemCount,swipeLeft()))
}
很好。考试通过了

现在,我创建了一个在向右滑动时必须失败的测试。因为当向右滑动时,什么都不会发生

@Test
fun scroll_itemList_notSwipeRight() {
     // scroll
     onView(withId(R.id.tradersRecyclerView))
                .perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
     // swipe
     onView(withId(R.id.tradersRecyclerView))
                .perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
 }
@测试
趣味卷轴\u项目列表\u notSwipeRight(){
//卷轴
onView(带id(R.id.tradersRecyclerView))
.执行(RecycleServiceActions.scrollToPosition(checkItemCount));
//刷
onView(带id(R.id.tradersRecyclerView))
.perform(RecycleServiceActions.ActionOnItemPosition(checkItemCount,ViewActions.SwiperRight()))
}
但这次测试也成功通过了。为什么? 我需要创建检查的测试,而不是向右滑动什么也不发生

附言。 这里是向左和向右滑动时的工作测试

@Test
fun itemList_swipeLeft_isDisplayedSwipeContainer() {
    onView(withId(R.id.tradersRecyclerView))
            .perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
    onView(withId(R.id.tradersRecyclerView))
            .perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
    onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
            .check(matches(isDisplayed()))
}

@Test
fun itemList_swipeRight_notDisplayedSwipeContainer() {
    onView(withId(R.id.tradersRecyclerView))
            .perform(scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
    onView(withId(R.id.tradersRecyclerView))
            .perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
    onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
            .check(matches(not(isDisplayed())))
}
@测试
有趣的项目列表\u swipeLeft\u isDisplayedSwipeContainer(){
onView(带id(R.id.tradersRecyclerView))
.执行(RecycleServiceActions.scrollToPosition(checkItemCount));
onView(带id(R.id.tradersRecyclerView))
.perform(RecycleServiceActions.ActionOnItemPosition(checkItemCount,swipeLeft()))
onView(带有RecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount,R.id.swipeContainer))
.检查(匹配项(isDisplayed())
}
@试验
趣味项目列表\u swipeRight\u未显示SwipeContainer(){
onView(带id(R.id.tradersRecyclerView))
.执行(滚动位置(checkItemCount));
onView(带id(R.id.tradersRecyclerView))
.perform(ActionItemPosition(checkItemCount,ViewActions.SwiperRight()))
onView(带有RecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount,R.id.swipeContainer))
.检查(匹配项(不是(isDisplayed()))
}

将类似的内容添加到您的测试中(两个):

这将添加对
视图可见性的检查,该视图在向左滑动时应仅可见

因此,第一个测试将通过,第二个测试将失败,因为向右滑动时此视图将不可见


希望有帮助。

在测试中,您没有检查任何内容。你只是在做动作。这就是为什么他们两个都是successful@LucaNicoletti如果我不能正确刷卡,为什么浓缩咖啡不会引发任何异常?为什么你不能正确刷卡?@LucaNicoletti,因为当我尝试正确刷卡时,什么都不会发生。不显示子项(恢复、停止)当您向右滑动时,应用程序是否崩溃?不所以测试不会失败。测试期间不会发生任何事情,但您没有(在测试中)说明应该发生什么事情。是的,您的解决方案可以帮助我。谢谢
onView(withId(R.id.*your_resume_button_id*)).check(mathes(isDisplayed()))