2

我有一个用于 android 应用程序的测试套件,测试多个场景。对于他们中的大多数人来说,使用 AndroidX 测试框架的 launchActivity 是有意义的。

在同一个套件中,我也有测试从包中恢复活动的测试。这些测试需要在开发人员选项中启用“不保留活动”,因为只有这样才能直接进行设置,以便使用非空的已保存实例状态调用 onCreate。

但是,当Don't keep activities在开发人员选项中启用时,launchActivity 会失败并IllegalStateException显示以下堆栈跟踪:

java.lang.IllegalStateException: "Don't keep activities" developer options must be disabled for ActivityScenario
at androidx.test.internal.util.Checks.checkState(Checks.java:96)
at androidx.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:218)
at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:190)
[...]

我想知道为什么存在这种限制以及如何处理?因为当活动从实例状态恢复时,它会阻止测试场景。

即使 UiAutomator 用于这些特定测试用例测试从实例状态恢复活动,测试也不能真正在同一设备/模拟器上一起运行,因为此设置是系统设置。

或者,可以在测试之前和之后打开和关闭设置,但这只能在根设备上工作,或者需要使用 UiAutomator 来翻转系统设置开关,这非常慢。

4

1 回答 1

2

事实证明,ActivityScenario 的重新创建涵盖了这个特定场景:

当前 Activity 将在其数据通过 onSaveInstanceState(Bundle) 保存到 Bundle 后被销毁,然后使用保存的 Bundle 创建一个新的 Activity。在此方法调用之后,确保 Activity 状态恢复到与其先前状态相同的状态。

于 2019-11-15T14:54:23.430 回答