Android: Как сделать reset/очистить настройки приложения во время модульного тестирования?
Я хочу начать с согласованной тестовой среды, поэтому мне нужно reset/очистить мои настройки. Здесь SetUp для теста я до сих пор. Он не сообщает о каких-либо ошибках, и мои тесты проходят, но настройки не очищаются.
Я тестирую активность MainMenu, но временно переключаюсь на действие OptionScreen (которое расширяет класс Android PreferenceActivity.) Я вижу, что тест корректно открывает OptionScreen во время прогона.
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.
Код 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);
Спасибо!
Ответы
Ответ 1
Проблема заключается в том, что вы не сохраняете исходный редактор из вызова edit(), и вы извлекаете новый экземпляр редактора и вызываете commit() на него, не внося никаких изменений в это. Попробуйте следующее:
Editor editor = settings.edit();
editor.clear();
editor.commit();
Ответ 2
Ответ здесь,
android unit test: очистка prefs перед тестированием
вызов,
this.getInstrumentation().getTargetContext()