一貫性のあるテスト環境から始めたいので、設定をリセット/クリアする必要があります。これが私がこれまでに行ったテスト用のセットアップです。エラーは報告されておらず、テストは合格ですが、設定がクリアされていません。
「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);
ありがとう!
問題は、edit()呼び出しから元のエディターを保存しておらず、エディターの新しいインスタンスをフェッチして、そのインスタンスに変更を加えずにcommit()を呼び出すことです。これを試して:
Editor editor = settings.edit();
editor.clear();
editor.commit();