[英]How to do unit testing retrofit api calls with viewmodel + livedata?
我刚刚了解了 Android 单元测试。 我想使用 viewmodel + livedata 对我的练习项目实施单元测试 API 改造调用。 这是 viewmodel 类之一。
class NextMatchViewModel(league : League, application: Application): AndroidViewModel(application) {
// get idLeague passing for call getNextMatch()
private val _idLeague = MutableLiveData<League>()
private val idLeague: LiveData<League>
get() = _idLeague
// next match liveData
private val _nextMatch = MutableLiveData<List<Match>>()
val nextMatch: LiveData<List<Match>>
get() = _nextMatch
init {
//get _idLeague value from argument(SafeArgs)
_idLeague.value = league
getNextMatch()
}
private fun getNextMatch() {
idLeague.value?.idLeague?.let {
LeagueApi.retrofitService.getNextMatch(it).enqueue(object : Callback<MatchResponse>{
override fun onFailure(call: Call<MatchResponse>, t: Throwable) {
Log.d(TAG, t.message!!)
}
override fun onResponse(call: Call<MatchResponse>, response: Response<MatchResponse>) {
_nextMatch.value = response.body()?.events
Log.d(TAG, "success")
}
})
}
}
companion object {
private val TAG = NextMatchViewModel::class.java.simpleName
}
}
根据 Clean 架构方法,您的 ViewModel 代码不得包含任何与框架相关的代码。 特别是关于应用的参考。 LeagueApi 不是表示层的一部分。 您可以像这样解决它:创建 UseCase 或 Interactor,将其注入 viewModel,使用 Repository 模式,将其注入 UseCase 或 Interactor,将您的 LeagueApi 注入您的存储库并在那里完成所有必要的工作。
此链接可能会有所帮助: https : //proandroiddev.com/how-to-implement-a-clean-architecture-on-android-2e5e8c8e81fe
良好的架构将使您的代码可测试。 希望它会有所帮助:)
实际上,您不需要对 API 请求进行单元测试! 当您需要访问您的存储或网络时,您需要为您的代码提供一些仪器测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.