21

Voglio iniziare con un ambiente di test coerente, quindi devo ripristinare/cancellare le mie preferenze. Ecco il SetUp per il test che ho finora. Non sta segnalando errori e i miei test passano, ma le preferenze non vengono cancellate.Android: come posso ripristinare/cancellare le preferenze dell'applicazione durante il test dell'unità?

Sto testando l'attività "MainMenu", ma passerò temporaneamente all'attività OptionScreen (che estende la classe PreferenceActivity di Android.) Vedo il test aprire correttamente OptionScreen durante la corsa.

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. 

Codice 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); 

Grazie!

risposta

29

Il problema è che non si sta salvando l'editor originale dalla chiamata edit() e si recupera una nuova istanza dell'editor e si chiama commit() su quello senza aver apportato alcuna modifica a quello. Prova questo:

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

Grazie mille. Wow, dovrei davvero leggere la documentazione più a fondo. Non mi ero reso conto che stavo costruendo un oggetto editor; Mi aspettavo che stavo operando direttamente sulle preferenze. –

+4

Anche questo funzionerebbe settings.edit(). Clear(). Commit(); – Federico