При тестировании recyclerView, присутствующего в моем приложении, я создаю пользовательские утверждения RecyclerView и действия для выполнения на них тестов Espresso.
У меня есть RecyclerView
, который имеет 4 дочерних макета. Мне нужно выполнить действия и утверждения на детей этих макетов.
ViewAssertion
, который я внедряю, должен занять позицию в recyclerView, идентификатор ресурса и утверждение, которое мне нужно выполнить на этом дочернем элементе.
При переопределении метода check я нашел интересующее меня представление, а затем вызвал метод проверки переданного утверждения. Вот мой проблемный NoMatchingViewException
, поскольку метод проверки выглядит следующим образом:
override fun check(view: View?, noViewFoundException: NoMatchingViewException?)
Я понимаю, что передача нуля вместо noViewFoundException
означает, что представление не было найдено.
Что мне не нравится в моем коде, так это блок try catch. Если я правильно понимаю NoMatchingViewException
, он должен быть создан, когда элемент, для которого вы хотите выполнить утверждение, не найден. Если я ошибаюсь, скажите мне, пожалуйста.
Вызов метода.
val childView: View?
return try {
childView = itemAtPosition.findViewById(viewId)
viewAssertion.check(
childView, null
)
} catch (e: Exception) {
viewAssertion.check(null,
ExceptionBuilderHelper.buildNoMatchingViewException(recyclerView, viewId))
}
И метод buildNoMatchingViewException:
fun buildNoMatchingViewException(rootView: View, searchedViewId: Int) : NoMatchingViewException {
return NoMatchingViewException.Builder()
.withRootView(rootView)
.withViewMatcher(ViewMatchers.withId(searchedViewId))
//TODO: fix the list of nulls...
.withAdapterViews(listOf(null))
.withAdapterViewWarning(EspressoOptional.absent())
.withCause(java.lang.IllegalStateException("No view in recyclerView of id: " + rootView.id + " with id: " + searchedViewId))
.build()
}
Как и в TODO, я не хочу создавать listOf (null), поскольку это более чем глупо.
Как правильно построить это исключение? Если этот код подходит, то, что должно быть передано в методах компоновщика - особенно withAdapterViews
.