android - Android 测试共享偏好
问题描述
我想测试一个值是否正确保存到SharedPreferences
.
在我的代码中,我进行了SharedPreferences
注入,因此我保存了一个值,如下所示:
with(sharedPreferences.edit()) {
putString("testkey", "dummyValue")
apply()
}
在我的测试中:
val mockSharedPreferences = mock(SharedPreferences::class.java)
val mockEditor = mock(SharedPreferences.Editor::class.java)
`when`(sharedPreferences.edit()).thenReturn(mockEditor)
assert(mockSharedPreferences.getString("testkey") == "dummyValue")
问题是 mockSharedPreferences 返回 null 那么我还需要模拟/更改什么?
解决方案
如果返回 true,您可以使用此代码,您的值已保存。
public boolean saveUserId(String saveUserId) {
SharedPreferences
sharedPreferences=context.getSharedPreferences(USER_DETAILS,
MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString(USER_ID, saveUserId);
editor.apply();
return true;
}
如果您想获取保存的值,下面的代码会很有帮助。
public String getUserId(){
SharedPreferences sharedPreferences=context.getSharedPreferences(USER_DETAILS, MODE_PRIVATE);
return sharedPreferences.getString(USER_ID,null);
}
推荐阅读
- javascript - 无法读取未定义的属性“脏”
- c# - 关闭 windows 会话时关闭 winforms 系统
- javascript - 迭代抓取的数据以作为嵌入内的字段对象返回
- swift - 检测与蒙版图像(不是矩形)相交
- html - 如何固定水平定位?
- swift - 如何在 AnyIterator 中抛出异常
- javascript - removeEventListener() 不适用于 HTML5 文件中添加的事件
- java - 冰壶泽西端点产生“找不到当前请求的跨度”
- java - Java - java/lang/ProcessBuilder 的这种用法。
([Ljava/lang/String;)V 容易受到命令注入 (Sonar) 的攻击 - python - Python,从列表中删除对象