android - 浓缩咖啡测试失败
问题描述
我正在 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")))
}
但是错误不是来自 Test 类,而是来自我的被测片段。崩溃是在这行代码中执行的:
override fun onStart() {
super.onStart()
(activity!! as MainActivity).supportActionBar?.hide() //here
}
我在这里没有得到的是,当我在没有测试的情况下正常运行应用程序时,我没有遇到任何错误。
解决方案
这是完整的答案。
About launchFragmentInContainer
- 它获取给定的片段并在内部EmptyFragmentActivity
类中启动它 - 将片段放置在根视图容器中。
因此,它应该只用于检查片段,而不依赖于它的父活动。
在您的情况下,您尝试在您正在测试的片段内隐藏一个操作栏。但在测试中,您的片段不会在 MainActivity 中启动。
如果你只想检查片段,而不是(activity!! as MainActivity).supportActionBar?.hide()
你需要写这样的东西:
if(activity!! is MainActivity){
activity?.supportActionBar?.hide()
}
或者你应该为你的 MainActivity 或者你在哪里使用你的片段编写测试
推荐阅读
- android - Android从图库中选择图像不起作用
- r - Cumulative sum with restart, optimization in R
- postgresql - PostgreSQL COPY 无法从 CSV 文件中读取 JSON
- html - intersectionObeserver API 中的 isVisible 属性是什么意思?
- powershell - How to Combine and split values by delimiter?
- javascript - addEventListener 在 useEffect 挂钩中不起作用
- java - 如何使用 apache poi 在 docx 中计算 =SUM(Above) 函数
- javascript - 从 Nativescript 的 WebView 访问 headers/queryparams
- php - 相同的 url 重写起始 url 但目标不同的问题
- spring-kafka - 使用 SeekToCurrentErrorHandler 和 DeadLetterPublishingRecoverer 进行反序列化失败时未创建 DLT