当前位置: 首页 > 知识库问答 >
问题:

然而,与这个mock的交互只有1次:

太叔京
2023-03-14

这是我第一次与kotlin mvp Rx一起使用mockito,并且,我得到一个错误“wanted但not invoked-but,This mock正好有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{override fun trampoline():Scheduler{TODO(“未实现”)//要更改创建函数的正文,请使用文件设置文件模板。}

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()
}

}

这是我的会前测试

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")

}

共有1个答案

百里嘉泽
2023-03-14

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

 类似资料:
  • 我有一门课要考。 提供了我的测试类, 我得到了下面提供的错误堆栈, 需要但未调用:Holder.SetapIkey();->在com.ratepay.ella.service.config.EmailageServiceConfigurationTest.TestEmailageConfigholder(EmailageServiceConfigurationTest.java:48)实际上,与这

  • 在执行以下步骤后,我得到了错误:想要但没有调用:实际上,与这个模拟没有任何交互。我不明白我在这里遗漏了什么。

  • 更新下面是异常消息: 更新2用真实实例替换mocked WithDefinitions对象后,我得到以下输出:

  • 当我试图通过传递强制转换的值来模拟重载的方法时,我得到了以下错误。 例如,为了模拟 我正在做 但是当我运行测试用例时,我会得到以下错误 为什么要调用,甚至在专门调用了之后? 附加详细信息 logWarn的定义

  • 我正在寻找一个简化的算法来测试OBB和球体之间的交点。我见过一些算法,但大多数算法过于复杂,因为它们需要考虑OBB上的所有3个旋转轴。在我的例子中,OBB只在Z轴上旋转,所以我觉得标准的圆形/旋转矩形算法和球体/OBB算法之间的某种东西可能会更优化。 作为参考,OBB存储为中心的,半维的另一个,方向的-请记住,我们可以保证,当转换为欧拉旋转时,两个轴将为0,只有Z轴会改变。球体只是中心的和半径的。

  • 我被通缉了,但没有被征召。方法在行处与此模拟错误没有任何交互。甚至我也嘲弄了这个对象&在调试函数时被调用。 下面是我要测试的函数,