【问题标题】:Espresso test Fail浓缩咖啡测试失败
【发布时间】:2020-12-21 19:31:55
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这意味着您的activityEmptyFragmentActivity,而您尝试将其转换为MainActivity
  • EmptyFragmentActivity 是什么
  • 您是否阅读过有关launchFragmentInContainer 的文档?这个功能所做的所有事情都是获取给定的片段并在内部 EmptyFragmentActivity 类中启动它 — 将片段放置在根视图容器中

标签: android android-fragments android-espresso android-testing android-navigation


【解决方案1】:

这是完整的答案。
关于launchFragmentInContainer - 它采用给定的片段并在内部EmptyFragmentActivity 类中启动它 — 将片段放置在根视图容器内。
因此,它应该只用于检查片段,而不依赖于它的父活动。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多