How to test saving and restoring state of an android activity with Espresso?

The solution is to use the activity.recreate() method BUT do not forget to follow this by an assertion which waits for an idle state. My problem with my first attempt was that the test I was writing was like :

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

Where XXX was a field that I expected to be null when no save/restore state handling had been implemented. But that was not the case because my assertion was not waiting for the recreation task to be completed.

So in my situation, my problem was solved when I simply add an espresso assertion which does the job, for example by verifiying that the TextView which displayed the XXX field was empty.

Finally, thanks to the UI thread synchronization provided by Espresso, my test which can assert on my activity save/restore state missing implementation can be written like :

instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        activity.recreate();
    }
});
onView(withText("a string depending on XXX value")).check(doesNotExist());

Note that the rotation solution suggested does the job either, but can be much slower than activity.recreate() when we just want to test the activity lifecycle. And in my case it was not relevant since my activity was not implemented for a landscape orientation.


You can rotate the screen and verify that the state is saved and restored properly.

private void rotateScreen() {
  Context context = InstrumentationRegistry.getTargetContext();
  int orientation 
    = context.getResources().getConfiguration().orientation;

  Activity activity = activityRule.getActivity();
  activity.setRequestedOrientation(
      (orientation == Configuration.ORIENTATION_PORTRAIT) ?
          ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : 
          ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Full example: http://blog.sqisland.com/2015/10/espresso-save-and-restore-state.html