浓咖啡测试失败

时间:2019-05-21 11:57:42

标签: android android-fragments android-espresso android-navigation

我正在Android上进行一些Espresso测试。测试失败,并显示以下错误:

  

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 个答案:

答案 0 :(得分:1)

这里是完整答案。因此,让我们重复一下launchFragmentInContainer。所有这些功能都将获取给定的片段,并将其启动到内部的EmptyFragmentActivity类中-将片段放置在根视图容器中。因此,它应仅用于检查片段,这与父活动无关。对于您的情况,您尝试将操作栏隐藏在要测试的片段内。但是在测试中,您的片段将不会在MainActivity中启动。因此,如果您只想检查片段,而不是(activity!! as MainActivity).supportActionBar?.hide(),则最好编写如下代码:

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

或者您应该为MainActivity或片段的使用位置编写测试