Android Espresso: последовательное выполнение нескольких тестов

Я пытаюсь запустить серию тестов с помощью Espresso для Android. Похоже, что между запусками действия НЕ закрываются. Независимо от состояния приложения после одного теста, его осталось для следующего теста.

Мне нужно запустить каждый из моих тестов из нового приложения. В Robotium это обрабатывается с помощью solo.finishOpenedActivites () в методе tearDown ().
http://robotium.googlecode.com/svn/doc/com/robotium/solo/Solo.html#finishOpenedActivities ()

Как это можно сделать с помощью эспрессо?

Проблема с предоставленным исправлением в отчете об ошибке состоит в том, что это будет выполнено только при завершении всего пакета. Если вы хотите иметь чистый стек активности после каждого теста, вам нужно вручную что-то сделать. Я написал небольшой класс, который делает почти то же самое, что и исправление вышеупомянутого билета, но может быть выполнено в любой момент времени.

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(); } } } } 

Решение Sebastian Gröbler написало отлично. Тем не менее, библиотеки были переименованы в последнюю тестовую библиотеку Espresso и Android, вот тот же класс, написанный для 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 фактически пытается завершить все открытые действия, но не может сделать это должным образом из-за глупой ошибки: https://code.google.com/p/android-test-kit/issues/detail?id=66

Патч, связанный с проблемой, устраняет эту проблему.