我正在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
}
我没有得到的是,在没有测试的情况下正常运行应用程序时,我没有遇到任何错误。
答案 0 :(得分:1)
这里是完整答案。因此,让我们重复一下launchFragmentInContainer
。所有这些功能都将获取给定的片段,并将其启动到内部的EmptyFragmentActivity类中-将片段放置在根视图容器中。因此,它应仅用于检查片段,这与父活动无关。对于您的情况,您尝试将操作栏隐藏在要测试的片段内。但是在测试中,您的片段将不会在MainActivity中启动。因此,如果您只想检查片段,而不是(activity!! as MainActivity).supportActionBar?.hide()
,则最好编写如下代码:
if(activity!! is MainActivity){
activity?.supportActionBar?.hide()
}
或者您应该为MainActivity或片段的使用位置编写测试