Android fragments java.lang.IllegalStateException:在由launchFragmentInContainer引起的onSaveInstanceState之后无法执行此操作

Android fragments java.lang.IllegalStateException:在由launchFragmentInContainer引起的onSaveInstanceState之后无法执行此操作,android-fragments,android-testing,android-architecture-components,android-architecture-navigation,Android Fragments,Android Testing,Android Architecture Components,Android Architecture Navigation,我正在尝试测试应用程序工作流。导航组件已用于定义应用程序工作流。已使用FragmentScenario基于此引用()测试从一个片段到另一个片段的导航 在build.gradle中添加了以下依赖项 debugImplementation(“androidx.fragment:fragment testing:1.1.0-beta01”){ 排除组:“androidx.test”,模块:“core” } 用于访问apilaunchFragmentInContainer 已使用Mock模拟导航控制器

我正在尝试测试应用程序工作流。导航组件已用于定义应用程序工作流。已使用FragmentScenario基于此引用()测试从一个片段到另一个片段的导航

在build.gradle中添加了以下依赖项
debugImplementation(“androidx.fragment:fragment testing:1.1.0-beta01”){
排除组:“androidx.test”,模块:“core”
}

用于访问api
launchFragmentInContainer

已使用Mock模拟导航控制器

下面是示例代码段

@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.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

答案不正确,因为此测试未在物理设备上运行,所以活动和片段场景由构建环境计算机上的AndroidJUnit4测试运行程序运行。我希望这些场景将通过instrumentation runner和robolectric运行。在前一种情况下,锁定屏幕确实是一个合理且可能的原因
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