Я пытаюсь протестировать фрагмент с помощью FragmentScenario. Этот фрагмент имеет собственное меню. На панели действий есть значок добавления, и нажатие на этот пункт меню запускает дочерний фрагмент, из которого пользователь может добавлять новые элементы. Поэтому я пытаюсь проверить это поведение. Однако, как вы, возможно, знаете, FragmentScenario запускает фрагмент в рамках EmptyFragmentActivity, не запуская реальную активность хоста. Поскольку панель действий не является частью макета фрагмента, а принадлежит основной активности, панель действий и, следовательно, меню даже не становятся видимыми во время тестирования. Итак, как я могу протестировать взаимодействие с меню?
Я нашел эту часть информации из официальных документов:
Если вам нужно вызвать метод самого фрагмента, например, ответить на выбор в меню параметров, вы можете сделать это безопасно, реализуя FragmentAction:
@RunWith(AndroidJUnit4::class)
class MyTestSuite {
@Test fun testEventFragment() {
val scenario = launchFragmentInContainer<MyFragment>()
scenario.onFragment(fragment ->
fragment.onOptionsItemSelected(clickedItem) {
//Update fragment's state based on selected item.
}
}
}
}
Однако как передать правильный элемент обратному вызову onOptionsItemSelected? Я попытался определить addMenuItem как переменную-член и инициализировать ее внутри onCreateOptionsMenu, но она возвращает значение null. onCreateOptionsMenu не вызывается во время тестирования. Поэтому я не знаю, как проверить взаимодействие пользователя с меню.