Android Espresso: как протестировать определенный фрагмент при выполнении одного действия для архитектуры нескольких фрагментов
мое приложение состоит из одного Activity много Fragments.
Я хочу использовать эспрессо для тестирования пользовательского интерфейса Fragments. Однако я столкнулся с проблемой.
как я могу проверить Fragment, который не добавляется к Activity на onCreate. Все примеры, которые я видел с Fragments вовлечение Fragment добавить onCreate.
Итак, как я могу сказать эспрессо, чтобы перейти к определенному Fragment и начать оттуда?
спасибо
2 ответов
Эспрессо тест Fragments только если они отображаются. И это требует, чтобы они отображались Activity.
С вашей текущей настройкой вам придется использовать эспрессо для click() ваш путь (как пользователь) с Fragment вы действительно хотите проверить.
в одном из моих проектов у меня есть ViewPager это показывает Fragments. Для тех Fragments Я использую пользовательский FragmentTestRule чтобы проверить их в изоляции. Я могу начать каждый Fragment сразу и используйте эспрессо Для того чтобы испытать его. Видеть ответ.
вы также можете:
- не используйте
Fragments.Activitiesлегче тестировать. Вы можете проверить каждыйActivityсамостоятельно. В большинстве случаевFragmentsне предлагают никакого преимущества надActivities.Fragmentsпросто сделайте реализацию и тестирование более сложными. - включить
FragmentActivityчтобы непосредственно показать определенныйFragmentкогда он будет создан. Е. Г. путем предоставления специального намерения, дополнительную к вашейFragmentActivity. Но это добавит тестовый код для вашего приложения, которое, как правило, не является хорошим решением.
просто покажите фрагмент, используя SupportFragmentManager действия.
например (Котлин) с ActivityTestRule:
@Rule
@JvmField
var activityRule = ActivityTestRule(MainActivity::class.java)
просто сделайте это перед тестами:
@Before
fun setup() {
activityRule.activity.supportFragmentManager.beginTransaction().replace(R.id.main_activity_container_for_your_fragments, FragmentToShow(), "fragment-tag").commitAllowingStateLoss()
Thread.sleep(500)
}