繁体   English   中英

如何使用 viewmodel + livedata 进行单元测试改造 api 调用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM