Эспрессо-тест Fail - PullRequest
0 голосов
/ 21 мая 2019

Я занимаюсь тестированием эспрессо в Android. Тест не пройден с этой ошибкой:

java.lang.ClassCastException: androidx.fragment.app.testing.FragmentScenario $ EmptyFragmentActivity нельзя привести к com.stavro_xhardha.pockettreasure.MainActivity

Это мой метод испытаний:

 @Test
    fun toolbarTitle_shouldContainCorrectInput() {
        val mockNavController = mock(NavController::class.java)
        val fragmentScenario = launchFragmentInContainer<SetupFragment>()
        fragmentScenario.onFragment {
           Navigation.setViewNavController(it.view!! , mockNavController)
        }
        onView(withId(R.id.toolbar)).check(matches(withText("Pick your country")))
    }

Но ошибка не из класса Test, а из моего тестируемого фрагмента. Авария выполняется в этой строке кода:

override fun onStart() {
        super.onStart()
        (activity!! as MainActivity).supportActionBar?.hide() //here
    }

Чего я не понимаю, так это того, что при нормальном запуске приложения без теста я не сталкиваюсь с ошибкой.

1 Ответ

1 голос
/ 28 мая 2019

Вот полный ответ. Итак, давайте повторим о launchFragmentInContainer. Все, что эта функциональность делает, это берет данный фрагмент и запускает его внутри внутреннего класса EmptyFragmentActivity - помещая фрагмент внутри корневого контейнера представления. Таким образом, его следует использовать только для проверки фрагмента, который не зависит от его родительской активности. В вашем случае вы пытаетесь скрыть панель действий внутри фрагмента, который вы тестируете. Но в тесте ваш фрагмент не будет запущен в MainActivity. Так что если вы хотите проверить только фрагмент, вместо (activity!! as MainActivity).supportActionBar?.hide() вам лучше написать что-то вроде этого:

if(activity!! is MainActivity){
    activity?.supportActionBar?.hide()
}

Или вы должны написать тест для своей основной деятельности или где вы используете свой фрагмент

...