java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState caused by launchFragmentInContainer

六月ゝ 毕业季﹏ 提交于 2020-06-12 05:39:26

问题


I am trying to test the app workflow. The navigation component has been used to define the app workflow. Have used FragmentScenario for testing the navigation from one fragment to another based on this reference(https://developer.android.com/guide/navigation/navigation-testing).

Have added the following dependency in build.gradle debugImplementation("androidx.fragment:fragment-testing:1.1.0-beta01") { exclude group: 'androidx.test', module: 'core' }

for accessing the api launchFragmentInContainer

Have used MockK for mocking the navController

Below is the sample snippet

@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)
    }
}

My expectation is to pass the test case but I am getting the following runtime error

 `java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState`

回答1:


Make sure the device you are running the tests on is unlocked. If the screen is off or at the lock screen you will get a stack trace that looks roughly like this:

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


来源:https://stackoverflow.com/questions/57344170/java-lang-illegalstateexception-can-not-perform-this-action-after-onsaveinstanc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!