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`
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With