android-fragments 浓缩咖啡测试失败

dz6r00yl  于 2022-11-13  发布在  Android
关注(0)|答案(2)|浏览(112)

我正在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
}

我在这里没有得到的是,当我在没有测试的情况下正常运行应用程序时,我没有遇到错误。

voj3qocg

voj3qocg1#

以下是完整的答案。
关于launchFragmentInContainer--它获取给定的片段并在内部EmptyFragmentActivity类中启动它 -- 将片段放置在根视图容器中。
因此,它应该只用于检查片段,而不依赖于它的父Activity。
在您的例子中,您尝试在测试的片段中隐藏一个操作栏,但在测试中,您的片段不会在MainActivity中启动。
如果你只想检查片段,而不是(activity!! as MainActivity).supportActionBar?.hide(),你需要写这样的东西:

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

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

ffvjumwh

ffvjumwh2#

我的案子就这样解决了。

if (activity is AppCompatActivity) {
                (activity as AppCompatActivity).supportActionBar?.hide()
  }

相关问题