■コード
以下のようにしてIsolatedContextのサブクラスを定義する。
public class HogeActivityTest extends ActivityInstrumentationTestCase2<Kaomoji> { private Kaomoji mActivity; private static final MockContentResolver RESOLVER = new MockContentResolver(); private static class TestIsolatedContext extends IsolatedContext { private Context mContext; public TestIsolatedContext(ContentResolver resolver, Context targetContext) { super(resolver, targetContext); mContext = targetContext; } @Override public SharedPreferences getSharedPreferences(String name, int mode) { return mContext.getSharedPreferences("prefix_" + name, mode); } } }
必要なメソッドはOverrideして実装する。以下のようにしてインスタンス化して、production環境に影響しない事を確かめる。
TestIsolatedContext context = new TestIsolatedContext(RESOLVER, mActivity); SharedPreferences preferences = context.getSharedPreferences(Constants.KEY_USER_DATA, Context.MODE_PRIVATE); String str = preferences.getString(Constants.KEY_USER_STRING, null); assertEquals(str, null);// production側で文字列が保存されているのに関係しない
参考
ちょうどIsolatedContextを使ってるテストがなかったので何となく間に合わせ的なコードになってしまった。