Android Espresso: exécuter plusieurs tests séquentiellement

J'essaie d'exécuter une série de tests en utilisant Espresso pour Android. Il semble que, entre les opérations, les activités ne soient PAS fermées. Quelle que soit l'état de l'application après un test, il est laissé pour le prochain test.

Je dois exécuter chacun de mes tests à partir d'un nouveau démarrage d'application. Dans Robotium, cela se fait en utilisant solo.finishOpenedActivites () dans la méthode tearDown ().
Http://robotium.googlecode.com/svn/doc/com/robotium/solo/Solo.html#finishOpenedActivities ()

Comment peut-on accomplir avec Espresso?

3 Solutions collect form web for “Android Espresso: exécuter plusieurs tests séquentiellement”

Le problème avec la correction fournie sur le rapport de bogue est que cela ne sera exécuté qu'à la fin de la suite entière. Si vous souhaitez avoir une pile d'activité propre après chaque test, vous devez faire manuellement quelque chose. J'ai écrit une petite classe qui fait à peu près la même chose que la correction sur le ticket mentionné ci-dessus, mais peut être exécutée à tout moment.

import android.app.Activity; import android.os.Handler; import android.os.Looper; import com.google.android.apps.common.testing.testrunner.ActivityLifecycleMonitor; import com.google.android.apps.common.testing.testrunner.ActivityLifecycleMonitorRegistry; import com.google.android.apps.common.testing.testrunner.Stage; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public final class ActivityFinisher implements Runnable { public static void finishOpenActivities() { new Handler(Looper.getMainLooper()).post(new ActivityFinisher()); } private ActivityLifecycleMonitor activityLifecycleMonitor; public ActivityFinisher() { this.activityLifecycleMonitor = ActivityLifecycleMonitorRegistry.getInstance(); } @Override public void run() { final List<Activity> activities = new ArrayList<Activity>(); for (final Stage stage : EnumSet.range(Stage.CREATED, Stage.STOPPED)) { activities.addAll(activityLifecycleMonitor.getActivitiesInStage(stage)); } for (final Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } } } 

La solution que Sebastian Gröbler a écrit fonctionne parfaitement. Néanmoins, les bibliothèques ont été renommées dans la dernière version de Espresso et Android Test Library, voici la même classe écrite pour Espresso 2.x

 import android.app.Activity; import android.os.Handler; import android.os.Looper; import android.support.test.runner.lifecycle.ActivityLifecycleMonitor; import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry; import android.support.test.runner.lifecycle.Stage; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public final class ActivityFinisher implements Runnable { public static void finishOpenActivities() { new Handler(Looper.getMainLooper()).post(new ActivityFinisher()); } private final ActivityLifecycleMonitor activityLifecycleMonitor; private ActivityFinisher() { this.activityLifecycleMonitor = ActivityLifecycleMonitorRegistry.getInstance(); } @Override public void run() { final List<Activity> activities = new ArrayList<Activity>(); for (final Stage stage : EnumSet.range(Stage.CREATED, Stage.STOPPED)) { activities.addAll(activityLifecycleMonitor.getActivitiesInStage(stage)); } for (final Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } } } 

GoogleInstrumentation tente réellement de finir toutes les activités ouvertes, mais ne parvient pas à le faire correctement en raison d'un bug stupide: https://code.google.com/p/android-test-kit/issues/detail?id=66

Le patch lié au problème corrige ce problème.

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.