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