我编写了一个使用Context
、第三方库和PreferenceManager
中的SharedPreferences
的类。
可以mock Context
,第三方库可以用一些mocking框架来mock,但是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();
}
和相应的,加载首选项。
最佳答案
看起来您实际上并不想要 PreferenceManager
的模拟实例(主要用于 PreferenceFragment
或 PreferenceActivity
)。
你可能想要:
模拟
SharedPreferences
,在这种情况下,您可以模拟Context#getSharedPreferences
(无论如何由PreferenceManager#getDefaultSharedPreferences
调用)。如果偏好被编辑,您可能还必须制作一个模拟SharedPreferences.Editor
,如上所述。你说你已经知道如何模拟上下文,所以这应该相当简单。使用环境中的实际偏好。这是最简单的,也不一定是个坏主意。请确保已正确清理它,以免您的测试相互干扰(或者,根据您的测试环境,不受手动使用应用程序的影响)。
如果你真的确实想模拟 PreferenceManager
实例(就像你在 PreferenceFragment
或 PreferenceActivity
中得到的那样) ,你绝对可以这样做。
由于它不是最终的,只要您有办法将其提供给您的代码通常可以在任何地方获得(在非测试代码中,这通常来自 getPreferenceManager()
)。
关于android - 如何在 Android 中模拟 PreferenceManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337558/