gpt4 book ai didi

unit-testing - 为什么 "getSharedPreferences"在单元测试中返回null?

转载 作者:行者123 更新时间:2023-12-02 13:14:15 24 4
gpt4 key购买 nike

我的类(class)是用 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()
}

这是演示者中调用的方法:
 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!!)”

这就是抛出的内容:

Caused by: java.lang.IllegalStateException: Application.mInstanc…m", Context.MODE_PRIVATE) must not be null at com.zuum.zuumapp.preferences.SharedPreferenceHandler$Companion.getPrefs(SharedPreferenceHandler.kt:18) at com.zuum.zuumapp.preferences.SharedPreferenceHandler$Companion.access$getPrefs(SharedPreferenceHandler.kt:14) at com.zuum.zuumapp.preferences.SharedPreferenceHandler.(SharedPreferenceHandler.kt:15)



我想通过调用“SharedPreferenceHandler.mInstance.accessToken!!”来获取accessToken在我的测试课上。

有可能在我的测试方法中得到它吗?

最佳答案

您不能在单元测试中使用 Android SharedPreferences,但您可以通过以下方式模拟您的方法调用:
Mockito.`when`(SharedPreferenceHandler.mInstance.accessToken).thenReturn("token ")

并返回你需要的东西。

关于unit-testing - 为什么 "getSharedPreferences"在单元测试中返回null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com