Igo*_*pov 6 android unit-testing
我有Activity,这是为了保存它的数据,以防系统决定在它在后台时杀死它.所以,我有onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState){
outState.putString("value", "some_value");
}
Run Code Online (Sandbox Code Playgroud)
我在onCreate中检查Bundle对象是否为null:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isRestarted=(savedInstanceState==null);
Run Code Online (Sandbox Code Playgroud)
我该如何编写测试方法?我试过了
public void testRecreate(){
Instrumentation mInstr=this.getInstrumentation();
mInstr.callActivityOnSaveInstanceState(mActivity, null);
mActivity.finish();
mActivity=this.getActivity();
assertEquals(false, mActivity.isRestarted);
}
Run Code Online (Sandbox Code Playgroud)
但似乎是错的.
您可以使用一些隐藏的API功能.在您的测试设置中,请致电
android.app.ActivityManagerNative.getDefault().setAlwaysFinish()
Run Code Online (Sandbox Code Playgroud)
方法通过反射(因为它是一个隐藏的API)并确认使用了成功设置的值
android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0)
Run Code Online (Sandbox Code Playgroud)
然后在测试清理中,将此设置设置为false.
启用该AlwaysFinish设置会导致系统在屏幕上不再显示活动时立即销毁,立即触发onSaveInstanceState事件.要使此代码有效,您将需要ALWAYS_FINISH和WRITE_SETTINGS权限.
请参阅此博客中链接的SetAlwaysFinish工具的代码:如何在真实设备上测试onSaveInstanceState和onRestoreInstanceState
| 归档时间: |
|
| 查看次数: |
2968 次 |
| 最近记录: |