【问题标题】:However, there was exactly 1 interaction with this mock:但是,与此模拟只有 1 次交互:
【发布时间】:2018-10-16 23:06:17
【问题描述】:

这是我第一次将 mockito 与 kotlin mvp Rx 一起使用 而且,我收到一个错误“想要但未调用 - 但是,与此模拟只有 1 次交互”

这是我的演讲者课程

class MatchPresenter(private val matchContract: MatchContract,private val apiService: MatchService,private val appSchedulerProvider: AppSchedulerProvider) {

fun getLastMatch() {
            apiService
            .getLastMatches()
            .subscribeOn(appSchedulerProvider.newThread())
            .observeOn(appSchedulerProvider.ui())
            .subscribe(
                    { matchList ->
                        matchContract.onSuccess(matchList)
                    },
                    { error ->
                        matchContract.onFailed(error.message)
                    }
            )
}

fun getNextMatch() {
            apiService
            .getNextMatches()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    { matchList ->
                        matchContract.onSuccess(matchList)
                    },
                    { error ->
                        matchContract.onFailed(error.message)
                    }
            )
}

这是我的演示者视图

interface MatchContract {
fun onFailed(message: String?)
fun onSuccess(matchModel: MatchModel)

} 这是我的 AppSchedulerProvider 类 AppSchedulerProvider :SchedulerProvider { 覆盖有趣的蹦床():调度程序{ TODO("未实现") //要更改创建函数的主体,请使用 File |设置 |文件模板。 }

override fun newThread(): Scheduler {
    return Schedulers.newThread()
}

override fun ui(): Scheduler {
    return AndroidSchedulers.mainThread()
}

override fun computation(): Scheduler {
    return Schedulers.computation()
}

override fun io(): Scheduler {
    return Schedulers.io()
}

}

这里是我的presenterTest

class MatchPresenterTest {
@Mock
private lateinit var view:MatchContract




@Mock
private lateinit var apiService: MatchService

@Mock
private lateinit var appSchedulerProvider: AppSchedulerProvider

private lateinit var presenter : MatchPresenter

@Before
fun setup(){
    MockitoAnnotations.initMocks(this)
    RxAndroidPlugins.getInstance().registerSchedulersHook(object : RxAndroidSchedulersHook() {
        override fun getMainThreadScheduler(): Scheduler {
            return Schedulers.immediate() // or .test()
        }
    })
    presenter = MatchPresenter(view,apiService,appSchedulerProvider)
}


@Test
fun getLastMatch_shoul_callSucces(){
    val event: MutableList<EventModel> = mutableListOf()
    val response = MatchModel(event)
    RxJavaHooks.setOnIOScheduler { scheduler1 -> Schedulers.immediate() }

    Mockito.`when`(apiService.getLastMatches()
    ).thenReturn(Observable.just(response))


    presenter.getLastMatch()

    verify(view).onSuccess(response)
    verify(view).onFailed("failed")

}

}

【问题讨论】:

    标签: android unit-testing kotlin mockito system.reactive


    【解决方案1】:

    删除测试最后一行中对 view.onFailed 的验证。除此之外,你做的一切都是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2011-10-16
      • 2018-11-30
      • 2011-12-18
      • 2013-08-15
      相关资源
      最近更新 更多