【发布时间】:2018-05-29 12:15:40
【问题描述】:
我的课程是用 Kotlin 编写的,这里是我的 SharedPreferenceHandler
class SharedPreferenceHandler(sharedPrefs: SharedPreferences) {
companion object {
var mInstance: SharedPreferenceHandler = SharedPreferenceHandler(getPrefs())
private fun getPrefs(): SharedPreferences {
return Application.mInstance.getSharedPreferences(
"myApp", Context.MODE_PRIVATE)
}
fun getInstance(): SharedPreferenceHandler {
return mInstance
}
}
private var sharedPreferences = sharedPrefs
var accessToken: String?
get() = sharedPreferences.getString(SharedPreference.ACCESS_TOKEN.name, null)
set(token) = sharedPreferences.edit().putString(SharedPreference.ACCESS_TOKEN.name, token).apply()
}
这是在presenter中调用的方法:
override fun reload(vm: ViewModel) {
super.updateViewModel(vm) {
//some stuffs
}
}
这是我的测试方法:
@Test
public void reload() {
when(SharedPreferenceHandler.Companion.getMInstance().getAccessToken()).thenReturn("234234234234234");
presenter.reload(viewModel);
}
在 super.updateViewModel(vm) 的处理程序中,我调用“SharedPreferenceHandler.mInstance.accessToken!!)”
这就是抛出的内容:
引起:java.lang.IllegalStateException: Application.mInstanc…m", Context.MODE_PRIVATE) 不能为空 在 com.zuum.zuumapp.preferences.SharedPreferenceHandler$Companion.getPrefs(SharedPreferenceHandler.kt:18) 在 com.zuum.zuumapp.preferences.SharedPreferenceHandler$Companion.access$getPrefs(SharedPreferenceHandler.kt:14) 在 com.zuum.zuumapp.preferences.SharedPreferenceHandler.(SharedPreferenceHandler.kt:15)
我想通过调用“SharedPreferenceHandler.mInstance.accessToken!!”来获取accessToken!在我的测试课上。
可以在我的测试方法中得到它吗?
【问题讨论】:
-
您是否使用 robolectric 进行测试?
-
不,我使用 PowerMock 进行一些模拟
标签: unit-testing kotlin sharedpreferences