我正在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")))
}
但是,错误不是来自测试类,而是来自我正在测试的片段。崩溃是在此代码中执行的:
override fun onStart() {
super.onStart()
(activity!! as MainActivity).supportActionBar?.hide() //here
}
我在这里没有得到的是,当我正常运行应用程序未经测试的情况下,我不会遇到错误。
这是完整的答案。
关于launchFragmentInContainer
-它采用给定的片段并在内部EmptyFragmentActivity
类中启动它 - 将片段放在根视图容器的内部。
因此,它应该仅用于检查片段,这不取决于其父活动。
在您的情况下,您尝试将动作栏隐藏在您正在测试的片段中。但是在测试中,您的片段将不会在主动脉中发射。
如果您只想检查片段,而不是(activity!! as MainActivity).supportActionBar?.hide()
,则需要编写类似的内容:
if(activity!! is MainActivity){
activity?.supportActionBar?.hide()
}
,或者您应该为MainAttivity或使用片段
隐藏在我的情况下对动作栏的帮助。
if (activity is AppCompatActivity) {
(activity as AppCompatActivity).supportActionBar?.hide()
}