java.lang.IllegalStateException: launchFragmentInContainer 导致 onSaveInstanceState 后无法执行此操作
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState caused by launchFragmentInContainer
我正在尝试测试应用程序工作流程。导航组件已用于定义应用程序工作流程。已使用 FragmentScenario 基于此参考 (https://developer.android.com/guide/navigation/navigation-testing).
测试从一个片段到另一个片段的导航
在build.gradle中添加了以下依赖
debugImplementation("androidx.fragment:fragment-testing:1.1.0-beta01") {
exclude group: 'androidx.test', module: 'core'
}
用于访问 api launchFragmentInContainer
已使用 MockK 模拟 navController
下面是示例片段
@RelaxedMockK
private lateinit var navController: NavController
@Before
fun setup() {
MockKAnnotations.init(this)
}
@Test
fun navigationToSecondFragmentTest() {
val secondFragmentScenario = launchFragmentInContainer<SecondFragment>()
secondFragmentScenario.onFragment {
Navigation.setViewNavController(it.requireView(), navController)
}
onView(ViewMatchers.withId(R.id.btn)).perform(ViewActions.click())
verify{
navController.navigate(R.id.secondFragment)
}
}
我的期望是通过测试用例,但我收到以下运行时错误
`java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState`
确保您用于运行 测试的设备已解锁。如果屏幕关闭或处于锁定屏幕,您将获得大致如下所示的堆栈跟踪:
java.lang.RuntimeException: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at androidx.test.runner.MonitoringInstrumentation.runOnMainSync(MonitoringInstrumentation.java:441)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:564)
at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:300)
at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:282)
at com.foo.package.YourFragmentTest.yourTestFunction(YourFragmentTest.kt:xy)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
我正在尝试测试应用程序工作流程。导航组件已用于定义应用程序工作流程。已使用 FragmentScenario 基于此参考 (https://developer.android.com/guide/navigation/navigation-testing).
测试从一个片段到另一个片段的导航在build.gradle中添加了以下依赖
debugImplementation("androidx.fragment:fragment-testing:1.1.0-beta01") {
exclude group: 'androidx.test', module: 'core'
}
用于访问 api launchFragmentInContainer
已使用 MockK 模拟 navController
下面是示例片段
@RelaxedMockK
private lateinit var navController: NavController
@Before
fun setup() {
MockKAnnotations.init(this)
}
@Test
fun navigationToSecondFragmentTest() {
val secondFragmentScenario = launchFragmentInContainer<SecondFragment>()
secondFragmentScenario.onFragment {
Navigation.setViewNavController(it.requireView(), navController)
}
onView(ViewMatchers.withId(R.id.btn)).perform(ViewActions.click())
verify{
navController.navigate(R.id.secondFragment)
}
}
我的期望是通过测试用例,但我收到以下运行时错误
`java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState`
确保您用于运行 测试的设备已解锁。如果屏幕关闭或处于锁定屏幕,您将获得大致如下所示的堆栈跟踪:
java.lang.RuntimeException: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at androidx.test.runner.MonitoringInstrumentation.runOnMainSync(MonitoringInstrumentation.java:441)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:564)
at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:300)
at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:282)
at com.foo.package.YourFragmentTest.yourTestFunction(YourFragmentTest.kt:xy)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState