我正在Android中进行一些Espresso测试。测试失败,出现以下错误:
java.lang.ClassCastException:无法将空片段活动强制转换为com。stavro_xhardha.pockettreasure。主活动
这是我的试验方法:
@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类,而是来自测试中的Fragment。崩溃是在下面这行代码中执行的:
override fun onStart() {
super.onStart()
(activity!! as MainActivity).supportActionBar?.hide() //here
}
我在这里没有得到的是,当我在没有测试的情况下正常运行应用程序时,我没有遇到错误。
2条答案
按热度按时间voj3qocg1#
以下是完整的答案。
关于
launchFragmentInContainer
--它获取给定的片段并在内部EmptyFragmentActivity
类中启动它 -- 将片段放置在根视图容器中。因此,它应该只用于检查片段,而不依赖于它的父Activity。
在您的例子中,您尝试在测试的片段中隐藏一个操作栏,但在测试中,您的片段不会在MainActivity中启动。
如果你只想检查片段,而不是
(activity!! as MainActivity).supportActionBar?.hide()
,你需要写这样的东西:或者,您应该为MainActivity或使用片段的位置编写测试
ffvjumwh2#
我的案子就这样解决了。