我运行特定的单元测试:
@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代码被调用(一个断点变成了两个断点)
并且我收到此运行时错误:
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怎么办?它仅针对此特定测试失败
任何想法是什么?
我已经在Robolectric和ActivityScenario中看到了这个问题,并且这似乎是一种竞争条件,在我们到达该片段时,该片段尚未附加。默认(LEGACY)LooperMode中对此有一个警告,如果未指定模式,则使用该警告。有关详细信息,请参见javadoc here