机器人引发FragmentManager已在执行事务

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

我运行特定的单元测试:

      @Rule
      public ActivityScenarioRule<FragmentUtilActivity> activityScenarioRule2 =
          new ActivityScenarioRule<>(FragmentUtilActivity.class);

      @Before
      public void setUp() {
... //not related to activityScenarioRule2
      }

      @Test
      @Config(qualifiers = "sw600dp")
      public void myTest() {

        activityScenarioRule2
            .getScenario()
            .onActivity(
                activity ->
                    standaloneAccountMenuDialogFragment.showNow(
                        activity.getSupportFragmentManager(), "FragmentTag"));

        assertThat(...);
      }

我看到@after代码被调用(一个断点变成了两个断点)

image.png

并且我收到此运行时错误:

FragmentManager is already executing transactions
java.lang.IllegalStateException: 
    at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManagerImpl.java:1551)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1611)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManagerImpl.java:137)
    at android.os.Handler.handleCallback(Handler.java:790)

如果我使用一次定义并由@Rule注释管理的activityScenario怎么办?它仅针对此特定测试失败

任何想法是什么?

android unit-testing fragment robolectric
1个回答
0
投票

我已经在Robolectric和ActivityScenario中看到了这个问题,并且这似乎是一种竞争条件,在我们到达该片段时,该片段尚未附加。默认(LEGACY)LooperMode中对此有一个警告,如果未指定模式,则使用该警告。有关详细信息,请参见javadoc here

© www.soinside.com 2019 - 2024. All rights reserved.