【问题标题】:Mockito retrofit2 with MVP architecture具有 MVP 架构的 Mockito retrofit2
【发布时间】:2019-02-11 05:30:49
【问题描述】:

我认为我在 TeamImplsTest 中的代码有问题,我需要建议 :D 这是我的代码

API接口

interface API { @GET("lookupteam.php") fun getTeam(@Query("id") id: String): Call<TeamModel> }

团队演示者

interface MatchPresenter { fun loadTeamDetail(team_id: String) }

TeamImpls

类 TeamImpls(val teamView:TeamView):TeamPresenter { 覆盖有趣的 loadTeamDetail(team_id: String) { val call = RetrofitConfig().getApi().getTeam(team_id) call.enqueue(对象:回调{ 覆盖有趣的onResponse(调用:调用,响应:响应){ if (response.isSuccessful()) { val res = response.body() res?.let { teamView.onSuccess(it) } } } 覆盖乐趣 onFailure(call: Call, t: Throwable) { Log.e("PrevMatchFragment", t.toString()) } }) } }

团队模型

数据类 TeamModel( 验证团队:ArrayList ) 数据类 TeamModeLResult( val idTeam:字符串, val strTeam:字符串, val strAlternate:字符串, val strSport:字符串, val strStadium:字符串, val strTeamBadge:字符串 )

这是我的 TeamImplsTest

类 TeamImplsTest { @嘲笑 私有lateinit var teamView:TeamView @嘲笑 私人 lateinit var teamPresenter: TeamPresenter @前 有趣的设置(){ MockitoAnnotations.initMocks(这个) teamPresenter = TeamImpls(teamView) } @测试 有趣的 loadTeamDetail() { val 团队 = TeamModel(arrayListOf()) val teamId = "133613" teamPresenter.loadTeamDetail(teamId) Mockito.verify(teamView).onSuccess(teams) } }

我有错误

通缉但未调用: teamView.onSuccess(TeamModel(teams=[])); -> 在 com.fathurradhy.matchschedule.domain.presenter.TeamImplsTest.loadTeamDetail(TeamImplsTest.kt:34) 实际上,与此模拟的交互为零。 通缉但未调用: teamView.onSuccess(TeamModel(teams=[])); -> 在 com.fathurradhy.matchschedule.domain.presenter.TeamImplsTest.loadTeamDetail(TeamImplsTest.kt:34) 实际上,与此模拟的交互为零。

【问题讨论】:

  • 您能否详细说明您遇到的具体问题是什么?
  • 你能解释一下这是什么问题吗?你有什么经验?哪些错误等
  • 我的帖子改了..

标签: kotlin mockito retrofit2 mvp


【解决方案1】:

您不是在模拟 API 调用,因为 loadTeamDetail 创建了自己的 API 实例。

为了让您能够测试 API 调用行为,您可以通过构造函数提供 API 实例,例如

class TeamImpls(private val api: API, private val teamView: TeamView) : TeamPresenter {

    override fun loadTeamDetail(team_id: String) {
        val call = api.getTeam(team_id)

这将允许您模拟 api 行为并在调用失败/成功时验证演示者调用正确的方法,例如

class TeamImplsTest {

    @Mock
    private lateinit var teamView: TeamView

    @Mock
    private lateinit var api: API

    @Mock
    private lateinit var teamPresenter: TeamPresenter

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        teamPresenter = TeamImpls(api, teamView)
    }

    @Test
    fun loadTeamDetail() {
        val teams = TeamModel(arrayListOf())

        val teamId = "133613"

        // Use retrofit-mock to create your mockResponse.
        // See: https://github.com/square/retrofit/tree/master/retrofit-mock
        Mockito.`when`(api.getTeam(teamId)).thenReturn(Calls.response(teams)

        teamPresenter.loadTeamDetail(teamId)

        Mockito.verify(teamView).onSuccess(teams)
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多