我已经编写了一个使用Context
、第三方库和来自PreferenceManager
的SharedPreferences
的类。
可以模拟Context
,第三方库可以使用一些模拟框架模拟,但是如何使用PreferenceManager
我有两种方法:
public void saveString(ThirdPartyObject obj) {
SharedPreferences appPreferences =
PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = appPreferences.edit();
editor.putString(mContext.getString(
R.string.preferences_string_name), obj.getString());
editor.commit();
}
相应地,它加载首选项。
发布于 2016-02-06 12:47:20
您可以使用共享首选项的专用上下文。RenamingDelegatingContext
将所有内容都委托给上下文。当我们从Context
访问SharedPreference时,我们使用getSharedPreferences(String name, int mode)
。
在这里,通过扩展RenamingDelegatingContext
,我们覆盖了getSharedPreferences,并用测试PREFIX
来伪装name参数,因此当测试运行时,它将写入不同于主应用程序的首选文件。
public class SpecializedMockContext extends RenamingDelegatingContext {
public static final String PREFIX = "test.";
public SpecializedMockContext(Context context) {
super(context, PREFIX);
}
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return super.getSharedPreferences(PREFIX + name, mode);
}
}
将此SpecialisedMockContext设置为您的测试应用程序上下文。setContext(specialisedMockContext)
和createApplication()
。
https://stackoverflow.com/questions/3337558
复制相似问题