21

Quiero comenzar con un entorno de prueba consistente, así que necesito restablecer/borrar mis preferencias. Aquí está la configuración para la prueba que tengo hasta ahora. No informa ningún error y mis pruebas se aprueban, pero las preferencias no se borran.Android: ¿Cómo reinicio/borro las preferencias de la aplicación durante la prueba unitaria?

Estoy probando la actividad "MainMenu", pero temporalmente cambio a la actividad OptionScreen (que amplía la clase de actividad de preferencia de Android). Veo que la prueba abre correctamente la OptionScreen durante la ejecución.

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. 

Código 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); 

Gracias!

Respuesta

29

El problema es que no está guardando el editor original de la llamada a edit(), y obtiene una nueva instancia del editor y llama a commit() sin haber realizado ningún cambio en eso. Prueba esto:

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

Muchas gracias. Guau, realmente debería leer la documentación más a fondo. No me di cuenta de que estaba construyendo un objeto editor; Esperaba que estuviera operando en las preferencias directamente. –

+4

También esto funcionaría settings.edit(). Clear(). Commit(); – Federico

3

respuesta está aquí, android unit test: clearing prefs before testing activity

llamada,

this.getInstrumentation().getTargetContext() 
+0

Sí, eso estaba en el código que presenté. Probablemente debería volver a formular la pregunta porque realmente era "¿dónde está el error en mi código?" –

Cuestiones relacionadas