【发布时间】:2018-11-16 23:14:19
【问题描述】:
所以我有一个通过构造函数接收Context 的类,并使用以下方法从中获取默认的SharedPreferences:
PreferenceManager.getDefaultSharedPreferences(context)
我正在测试这个类,在我的单元测试中,我编写了以下代码来在调用 getSharedPreferences(String, int) 时检索模拟的 SharedPreferences 实例:
Context context = mock(Context.class);
SharedPreferences sharedPreferences = mock(SharedPreferences.class);
when(context.getSharedPreferences(anyString(), anyInt()))
.thenReturn(sharedPreferences);
when(sharedPreferences.getString(anyString(), nullable(String.class)))
.thenReturn(tokenManager.getToken());
当我为这个类运行测试时,它以 null 对象结束,而不是我模拟的 SharedPreferences 实例。但是,如果我使用context.getSharedPreferences("stubbed", 123) 获取SharedPreferences 实例,我最终会得到我的模拟SharedPreferences 代码。
那么为什么PreferenceManager.getDefaultSharedPreferences(context) 会返回null 实例,而在我的模拟Context 上直接调用getSharedPreferences 会返回我模拟的SharedPreferences 实例?
【问题讨论】:
-
你查看
PreferenceManager.getDefaultSharedPreferences(context)的代码了吗? PM 如何从context获取数据? -
`return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode());``
标签: java android mockito sharedpreferences