Почему тест не провалится, когда swipeRight на RecyclerView? - PullRequest
0 голосов
/ 17 апреля 2019

Здесь мой 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" />

Когда смахивает lef t на элемент списка, чем я показываю подпункты (Resume, Stop)

Примерно так:

enter image description here

Подпункты показывают только при проведении пальцем влево .При смахивании вправо ничего не происходит .

Вот тест Эспрессо, который проверяет, что 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()))
 }

Хорошо.Тест пройден.

Теперь я создаю тест, который должен провалиться, когда проведите пальцем вправо.Потому что, когда проведите пальцем вправо , ничего не произойдет

@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()))
 }

, но этот тест также пройдет успешно.Зачем?Мне нужно создать тест, который проверяет, чем проведите пальцем вправо ничего не происходит

PS Здесь работают тесты, когда проведите пальцем влево и проведите пальцем вправо

@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())))
}

1 Ответ

1 голос
/ 17 апреля 2019

Добавьте что-то подобное в свои яички (оба):

onView(withId(R.id.*your_resume_button_id*)).check(mathes(isDisplayed()))

Это добавит проверку видимости для view, который должен быть только видимым при движении влево.

Итак, первый тест пройдёт, а второй - не пройдёт, так как этот вид не будет виден при пролистывании вправо.

Надеюсь, это поможет.

...