Android: Come ripristino / preferenze dell'applicazione chiare durante test di unità?
-
28-09-2019 - |
Domanda
Voglio iniziare con un ambiente di test coerente quindi ho bisogno di ripristinare / cancellare le mie preferenze. Ecco il programma di installazione di prova che ho finora. Non è segnalando eventuali errori e le mie prove passare, ma le preferenze non vengono cancellati.
sto testando l'attività "MainMenu", ma passare temporaneamente l'attività OptionScreen (che estende la classe PreferenceActivity di Android.) Faccio vedere il test aprire correttamente l'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!
Soluzione
Il problema è che non sta salvando l'editor originale dalla chiamata di modifica (), e si recupera una nuova istanza del curatore e chiamare commit () su tale senza aver fatto alcuna modifica che uno. Prova questo:
Editor editor = settings.edit();
editor.clear();
editor.commit();
Altri suggerimenti
risposta è qui, android unità di prova: prefs di compensazione prima di testare l'attività
chiamata,
this.getInstrumentation().getTargetContext()