Я пытаюсь написать модульные тесты для проекта Android, но столкнулся с препятствиями при создании экземпляра класса Application.В проекте используются Retrofit и LiveData с компонентами архитектуры Android.
В настоящее время я пытаюсь протестировать мою AuthRepository login функцию, но я не могу создатьэкземпляр репозитория, поскольку он зависит от пользовательского SharedPrefs класса, который зависит от приложения класса.
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)
}
Имея такую настройку, могу ли я выполнить простые старые UnitTests для моего AuthRepository?Или зависимость от Application вынудит меня использовать Instrumentation Tests для проверки моего AuthRepository?