Obecne espresso nie zapewnia żadnego mechanizmu resetowania stanu aplikacji. Ale dla każdego aspektu (pref, db, pliki, uprawnienia) istnieją rozwiązania.
Na wstępie należy unikać tego, że espresso rozpoczyna swoją czynność automatycznie, aby mieć wystarczająco dużo czasu na zresetowanie.
@Rule
public ActivityTestRule<Activity> activityTestRule = new ActivityTestRule<>(Activity.class, false, false);
A później rozpocząć swoją działalność z
activityTestRule.launchActivity(null)
Dla resetowanie preferencji można użyć następującego fragmentu (przed rozpoczęciem działalności)
File root = InstrumentationRegistry.getTargetContext().getFilesDir().getParentFile();
String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
for (String fileName : sharedPreferencesFileNames) {
InstrumentationRegistry.getTargetContext().getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
}
po rozpoczęciu aktywności zbyt Można przywrócić preferencje . Ale wtedy działanie mogło już odczytać preferencje.
Twoja klasa aplikacji jest uruchamiana tylko raz i jest już uruchomiona, zanim zresetujesz preferencje.
Zacząłem pisać bibliotekę, która sprawi, że testowanie będzie prostsze dzięki espresso i uiautomator. Obejmuje to oprzyrządowanie do resetowania danych aplikacji. https://github.com/nenick/espresso-macchiato Zobacz na przykład EspAppDataTool z metodami czyszczenia preferencji, baz danych, buforowanych plików i przechowywanych plików.
Projekt wykorzystuje wiele różnych plików SharedPreferences. Tak jak powiedziałem, posiadanie natywnej metody czyszczenia wszystkich plików SharedPreferences byłoby dość kruchym rozwiązaniem. :( – Turnsole
Jest równy, jeśli masz jeden lub 9999 tausend SharedPreferences.Zazwyczaj są one zlokalizowane w shared_prefs. Czego jeszcze można się spodziewać? Alternatywnie można napisać skrypt, aby uruchomić tylko każdy test, między każdym testem jasne dane aplikacji z adb a następnie rozpocznij następny test – nenick
O! Widzę, co tam zrobiłeś. Przeczytałem to zbyt szybko i uznałem, że "shared_prefs" było skrótem dla twojego_pliku_pliku_pliku, ale jest to dosłownie folder główny plików SharedPreferences. – Turnsole