我正在尝试在Android项目上编写单元测试,但是在创建Application类的实例时遇到了障碍。该项目使用带有Android体系结构组件的Retrofit和LiveData。
当前,我正在尝试测试 AuthRepository 的登录函数,但是由于它依赖于自定义< strong> SharedPrefs 类,该类依赖于 Application 类。
AuthRepository
@Singleton
class AuthRepository @Inject constructor(
val retrofitService: RetrofitService,
val sessionData: SharedPrefs
) {
fun login(username: String, password: String): LiveData<LoginResponse> {
return getCSRF().then {
if (it.result is GenericResponse.ErrorType) {
// Error Accepting Terms
val mutableLiveData = MutableLiveData<LoginResponse>()
mutableLiveData.value = LoginResponse(listOf(LoginResponse.ErrorType.Generic()))
mutableLiveData
}
else {
retrofitService.postLogin(LoginBody(username, password))
.map {
val res = LoginRemote.parseResponse(it.response)
return res
}
}
}
}
}
SharedPrefs
class SharedPrefs @Inject constructor(context: Application) {
private val sharedPrefs = context.getSharedPreferences("com.company.project.domain.PREFERENCE_FILE_KEY", Context.MODE_PRIVATE)
private val PREF_KEY_SESSION_COOKIE = "sessionCookie"
// SharedPreference Variable Management
var sessionCookie: String
get() = sharedPrefs.getString(PREF_KEY_SESSION_COOKIE, "")
set(value) = saveString(PREF_KEY_SESSION_COOKIE, value)
}
通过这种设置,我可以为AuthRepository运行简单的旧UnitTest吗?还是对 Application 的依赖会迫使我使用工具测试来测试我的AuthRepository?
答案 0 :(得分:0)
1。您可以使用Mockito模拟Application
类:
@Mock private lateinit var context: Application
@Before fun setupTasksViewModel() {
MockitoAnnotations.initMocks(this)
}
或模拟SharedPrefs
对象
@Mock private lateinit var prefs: SharedPrefs