我有Activity,这是为了保存数据,以防系统决定在后台处理时将其杀死。 所以,我有onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState){
outState.putString("value", "some_value");
}
我在onCreate中检查Bundle对象是否为null:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isRestarted=(savedInstanceState==null);
我该如何编写测试方法?我试过了
public void testRecreate(){
Instrumentation mInstr=this.getInstrumentation();
mInstr.callActivityOnSaveInstanceState(mActivity, null);
mActivity.finish();
mActivity=this.getActivity();
assertEquals(false, mActivity.isRestarted);
}
但似乎是错误的。
答案 0 :(得分:6)
您可以使用一些隐藏的API功能。在测试设置中,调用
android.app.ActivityManagerNative.getDefault().setAlwaysFinish()
通过反射的方法(因为它是一个隐藏的API)并确认使用
成功设置了该值android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0)
然后在测试清理中,将此设置设置为false。
启用AlwaysFinish
设置会导致系统在屏幕上不再显示活动时立即销毁,立即触发onSaveInstanceState事件。要使此代码生效,您需要ALWAYS_FINISH
和WRITE_SETTINGS
权限。
请参阅此博客中链接的SetAlwaysFinish工具的代码:How to test onSaveInstanceState and onRestoreInstanceState on a real device
答案 1 :(得分:2)
对于手动测试,此例程有效:
当不重新启动整个应用程序时,这会在您的活动上再次触发onCreate
。如果你没有正确保存和加载状态,你很快就会知道。
答案 2 :(得分:0)
如果你之前没有通过它,我发现do this至少一次是值得的。
答案 3 :(得分:0)
可以使用robolectric轻松测试这样的东西。看看吧!