■コード
以下のようにして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を使ってるテストがなかったので何となく間に合わせ的なコードになってしまった。