在Android中使用旧的JUnit3风格测试时,我可以执行以下操作来销毁并重新启动一个Activity:
Instrumentation inst = getInstrumentation();
Activity activity = inst.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = inst.getActivity();
// assert that activity's state is restored
如何使用新的测试支持库来完成相同的事情?我可以使用Espresso和/或UI Automator或新库提供的任何其他机制。
更新:
我尝试了以下方法:
Activity activity = activityTestRule.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = activityTestRule.getActivity();
// assert that activity's state is restored
然而,似乎 ActivityTestRule.getActivity()
不会重新启动活动。
finish()
部分应该与以前没有区别。我不知道在ActivityTestRule
上调用的getActivity()
是否会重新创建一个已销毁的活动。 - CommonsWarefinish()
后恢复什么状态。您可以尝试在finish()
后调用launchActivity()
并查看发生了什么,但那将创建一个全新的实例。或者,您也可以自己添加。ForkActivityTestRule
后随心所欲地添加! - CommonsWareonSaveInstanceState()
。4. 恢复具有先前状态的活动。5. 断言先前输入的数据仍在正确的视图中。--- 那么有更好的方法来测试吗? - Code-ApprenticeonSaveInstanceState()
。它是因为活动经历了配置更改而被调用的。finish()
不应该触发onSaveInstanceState()
。"那么有更好的方法来测试这个吗?" -- 你可以尝试使用UIAutomation.setRotation()
然后看看是否会触发onSaveInstanceState()
。 - CommonsWare