21

Chcę rozpocząć od spójnego środowiska testowego, więc muszę zresetować/wyczyścić moje preferencje. Oto SetUp do testu, który do tej pory miałem. Nie zgłasza żadnych błędów, a moje testy mijają, ale preferencje nie są usuwane.Android: Jak zresetować/wyczyścić preferencje aplikacji podczas testowania urządzenia?

Testuję działanie "MainMenu", ale tymczasowo przełączam się na działanie OptionScreen (które rozszerza klasę PreferenceActivity Androida.) Widzę, że test poprawnie otwiera OptionScreen podczas biegu.

public class MyTest extends ActivityInstrumentationTestCase2<MainMenu> { 

...

@Override 
    protected void setUp() throws Exception { 
    super.setUp(); 

    Instrumentation instrumentation = getInstrumentation(); 
    Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(OptionScreen.class.getName(), null, false); 

    StartNewActivity(); // See next paragraph for what this does, probably mostly irrelevant. 
    activity = getActivity(); 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); 
    settings.edit().clear(); 
    settings.edit().commit(); // I am pretty sure this is not necessary but not harmful either. 

Kod StartNewActivity:

Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName(instrumentation.getTargetContext(), 
      OptionScreen.class.getName()); 
    instrumentation.startActivitySync(intent); 
    Activity currentActivity = getInstrumentation() 
      .waitForMonitorWithTimeout(monitor, 5); 
    assertTrue(currentActivity != null); 

Dzięki!

Odpowiedz

29

Problem polega na tym, że nie zapisujesz oryginalnego edytora z wywołania edit(), a pobierasz nowe wystąpienie edytora i wywołuje metodę commit(), nie wprowadzając żadnych zmian w tym edytorze. Spróbuj tego:

Editor editor = settings.edit(); 
editor.clear(); 
editor.commit(); 
+0

Dzięki tak dużo. Wow, naprawdę powinienem przeczytać dokładniej dokumentację. Nie zdawałem sobie sprawy, że konstruuję obiekt edytora; Spodziewałem się, że działam bezpośrednio na preferencjach. –

+4

Również to działałoby settings.edit(). Clear(). Commit(); – Federico

3

odpowiedź jest tutaj, android unit test: clearing prefs before testing activity

wezwanie,

this.getInstrumentation().getTargetContext() 
+0

Tak, to było w kodzie, który przedstawiłem. Powinienem prawdopodobnie przeformułować pytanie, ponieważ to było naprawdę "gdzie jest błąd w moim kodzie?" –

Powiązane problemy