アクティビティが強制終了され、インスタンスの状態が保存され、このインスタンスの状態で再作成されるアクティビティのライフサイクルをテストするインストルメンテーション テストを作成しようとしています。
デバイスの開発者設定でバックグラウンド プロセスの制限を「バックグラウンド プロセスなし」に制限することで、この動作を手動でテストできますが、アクティビティを再現できることを証明する自動テストを実行できるようにしたいと考えています。
私のアクティビティには、ID R.id.content_frame のフラグメントがあります。
だから私はこれを持っています:
public class MainActivityInstrumentationTest extends ActivityInstrumentationTestCase2<MainActivity> {
public void testKillCreateLifeCycleWithProfileFragment() throws Throwable {
final Activity activity = getActivity();
navigateToProfile(activity);
Thread.sleep(5000);
runTestOnUiThread(new Runnable() {
@Override
public void run() {
activity.recreate();
}
});
getInstrumentation().waitForIdleSync();
Thread.sleep(5000);
assertProfileFragmentIsVisible((FragmentActivity) activity);
}
private void assertProfileFragmentIsVisible(FragmentActivity activity) {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
Fragment currentFragment = supportFragmentManager.findFragmentById(R.id.content_frame);
assertEquals(ProfileFragment.class.getName(), currentFragment.getClass().getName());
}
}
activity.recreate はすべてのライブ サイクル コールバック メソッドを通過し、最終的に保存されたバンドルで onCreate を呼び出しますが、assertProfileFragmentIsVisible
メソッドの fragmentManager にはフラグメントが含まれていません。
また、 activity.recreate を使用するのが正しい方法かどうかもわかりません。各ライフサイクルメソッドを手動で呼び出すなど、他の多くの方法を試しgetInstrumentation().callActivityOn...
ましたが、最終的に保存されたバンドルでアクティビティを作成する方法が見つかりませんでした..
このようなインストルメンテーション テストを作成する方法についてのアイデアをいただければ幸いです。
よろしくフランク