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 或您使用片段的地方编写测试
我正在 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 或您使用片段的地方编写测试