Espresso 测试失败

Espresso test Fail

我正在 Android 进行一些 Espresso 测试。测试失败并出现此错误:

java.lang.ClassCastException: androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity cannot be cast to 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")))
}

但是错误不是来自测试 class,而是来自我正在测试的片段。 崩溃是在这行代码中执行的:

override fun onStart() {
    super.onStart()
    (activity!! as MainActivity).supportActionBar?.hide() //here
}

我没有得到的是,当我 运行 应用程序正常情况下未经测试时,我没有遇到任何错误。

这是完整的答案。
关于 launchFragmentInContainer - 它获取给定的片段并在内部 EmptyFragmentActivity class 中启动它—— 将片段放在根视图容器中。
所以,它应该只用于检查片段,这不依赖于它的父 activity.

在您的情况下,您尝试将操作栏隐藏在您正在测试的片段中。但是在测试中,您的片段不会在 MainActivity 中启动。
如果你只想检查片段,而不是 (activity!! as MainActivity).supportActionBar?.hide() 你需要写这样的东西:

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

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