使用FragmentScenario测试片段会导致java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作

问题描述 投票:0回答:1

我曾尝试使用片段场景测试片段,但始终出现以下错误

@RunWith(AndroidJUnit4::class)
class HomeFragmentTest {

    @Test
    fun fab() {
        val scenario = launchFragmentInContainer<HomeFragment>()
    }
}.

java.lang.RuntimeException:java.lang.IllegalStateException:不能在onSaveInstanceState之后执行此操作在androidx.test.runner.MonitoringInstrumentation.runOnMainSync(MonitoringInstrumentation.java:441)在androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:564)在androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:300)在androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:282)在com.example.myapplication.ui.home.HomeFragmentTest.fab(HomeFragmentTest.kt:31)在java.lang.reflect.Method.invoke(本机方法)在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71)在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:268)在org.junit.runners.ParentRunner.run(ParentRunner.java:363)在androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:104)在org.junit.runners.Suite.runChild(Suite.java:128)在org.junit.runners.Suite.runChild(Suite.java:27)在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71)在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:268)在org.junit.runners.ParentRunner.run(ParentRunner.java:363)在org.junit.runner.JUnitCore.run(JUnitCore.java:137)在org.junit.runner.JUnitCore.run(JUnitCore.java:115)在androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)在androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:388)在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:2209)原因:java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作在androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1691)在androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1794)在androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1814)在androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:297)在androidx.fragment.app.testing.FragmentScenario $ 1.perform(FragmentScenario.java:317)在androidx.fragment.app.testing.FragmentScenario $ 1.perform(FragmentScenario.java:301)在androidx.test.core.app.ActivityScenario.lambda $ onActivity $ 2 $ ActivityScenario(ActivityScenario.java:551)在androidx.test.core.app.ActivityScenario $$ Lambda $ 4.run(未知来源:4)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:462)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在android.app.Instrumentation $ SyncRunnable.run(Instrumentation.java:2227)在android.os.Handler.handleCallback(Handler.java:883)在android.os.Handler.dispatchMessage(Handler.java:100)在android.os.Looper.loop(Looper.java:237)在android.app.ActivityThread.main(ActivityThread.java:7811)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)

android android-espresso android-testing
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.