有没有办法以编程方式测试 Activity 的保存和恢复状态代码?我的意思是这样做:

How to test code built to save/restore Lifecycle of an Activity? 但以自动化方式。

我已经测试了 activity.recreate() 方法,这几乎就是我要搜索的方法,但实际上它并没有像我正在终止进程那样重置我的 Activity 字段。所以即使我没有在我的 onCreate 方法中实现恢复内容,我的测试也可以通过(因为我的字段没有改变......)。

我目前正在使用 Espresso v2,我想知道是否可以通过使用 InstrumentationRegistry.getInstrumentation() 来实现?

最佳答案

解决方案是使用 activity.recreate() 方法,但不要忘记跟随这个等待空闲状态的断言。
我第一次尝试的问题是我正在编写的测试是这样的:

instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        activity.recreate();
    }
});
assertThat(activityTestRule.getActivity().getXXX()).isNull();

其中 XXX 是一个字段,当没有实现保存/恢复状态处理时,我希望它为空。但事实并非如此,因为我的断言不是在等待娱乐任务完成。

所以在我的情况下,当我简单地添加一个完成这项工作的 espresso 断言时,我的问题就解决了,例如通过验证显示 XXX 字段的 TextView 是空的。

最后,感谢 Espresso 提供的 UI 线程同步,我的测试可以对我的 Activity 保存/恢复状态丢失实现断言可以这样写:
instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        activity.recreate();
    }
});
onView(withText("a string depending on XXX value")).check(doesNotExist());

请注意,建议的旋转解决方案也可以完成这项工作,但当我们只想测试 Activity 生命周期时,它可能比 activity.recreate() 慢得多。就我而言,这无关紧要,因为我的 Activity 不是针对横向实现的。

关于android - 如何使用 Espresso 测试保存和恢复 android Activity 的状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32926643/

10-12 00:31
查看更多