如何解决Mickito错误-此处不需要任何交互

问题描述

最初是Presenter用来直接调用API服务的,我已经重构了这段代码以在其中使用Usecase和存储库层,因此Presenter将调用用例,该用例又调用调用apiservice的存储库层。

但是这样做,由于以下错误,一些测试用例失败了

org.mockito.exceptions.verification.VerificationInorderFailure: 
No interactions wanted here:
-> at com.xxxxsystems.xxxxxane.unit_test.clean.florder.presenter.atDataPresenterTest.triggerfllingComplete should not call setflOrder when the hardware service is disabled(atDataPresenterTest.kt:
But found this interaction on mock 'dataPresenter':
-> at com.xxxxsystems.xxxxxane.clean.florder.presenter.atDataPresenter.initSubscriptions(atDataPresenter.kt:145)

测试用例的错误位于inorder.verifyNoMoreInteractions()

我的测试用例是

@Test
fun `triggerfllingComplete should not call setflOrder when the hardware service is disabled`() {
    val onSuccess: Function0<Unit> = mock()
    val times = mock<Times>()
    mockfllingComplete(success = true)

    every(order.status).thenReturn(STATUS_flLING)
    every(equipment.times).thenReturn(times)
    every(editableFlagsProvider.shouldEditFlags()).thenReturn(false)
    every(order.isPartiallyflledStatus).thenReturn(true)

    presenter.setView(view)
    presenter.triggerfllingComplete(partiallyComplete = false,onSuccess = onSuccess)

    val inorder = inorder(view,foocApi,dataPresenter,onSuccess)
    inorder.verify(foocApi,once()).fllingComplete(any(),eq(true),any())
    inorder.verify(onSuccess,once()).invoke()
    inorder.verify(view,once()).legacyAttemptToPrintTicket()
    inorder.verify(dataPresenter,once()).afterfllingComplete(any())
    inorder.verify(view,once()).legacyUpdateView()
    inorder.verifyNoMoreInteractions() // ERROR IS HERE

    verify(view,never()).showEditableFlagsDialog(any())
    verify(view,never()).showSignatureDialogComplete(any())
    verify(hardwareServiceController,never()).setflOrder()
}

演示者层-

private fun initSubscriptions() {
        view?.also {
            dataPresenter.initSubscriptions(it,subscriptions) // line 145
}

我当时在考虑是否要取消销毁销毁用例,所以应该修复它,但事实并非如此。

我不太清楚为什么它会失败

这是我重构的代码

注释的代码是以前从演示者直接访问API的代码,我现在将其更改为访问用例,它是未注释的代码

    fllingCompleteUseCase.execute(
        order.id,true,flOrderWrapper(order),object : Subscriber<flOrderCompleteResponse>() {
            override fun onNext(response: flOrderCompleteResponse) {
                if (response.success) {
                    onSuccess.invoke()

                    response.flOrder?.let {
                        order.flags = it.flags
                        order.ticketNumber = it.ticketNumber

                        // IS THIS SAFE ???
                        if (settings.config?.isMultiVcleOrdersEnabled == true && it.equipment.size > 0) {
                            // needed for printing the overall summary ticket
                            order.equipment = it.equipment
                            order.atMeasurement = it.atMeasurement
                        }
                    }

                    app.saveState()
                    fllingCompleteSuccess(logTimed)
                    app.flOrderStateMachine.trigger(flOrderStateMachine.Events.onfllingComplete)

                    showEditableFlagsDialogIfrequired()
                } else {
                    fllingCompleteError(logTimed,response.error,currentStatus)
                }

                view?.legacyUpdateView()
            }

            override fun onCompleted() {}

            override fun onError(e: Throwable) {
                fllingCompleteError(logTimed,e.message,currentStatus)
                view?.legacyUpdateView()
            }
        }
    )

//        subscriptions += foocApi.fllingComplete(
//            id = order.id,//            fetchflOrderInResponse = true,//            body = flOrderWrapper(order)
//        )
//            .subscribeOn(Schedulers.io())
//            .unsubscribeOn(Schedulers.io())
//            .observeOn(AndroidSchedulers.mainThread())
//            .subscribe(
//                { response: flOrderCompleteResponse ->
//                    if (response.success) {
//                        onSuccess.invoke()
//
//                        response.flOrder?.let {
//                            order.flags = it.flags
//                            order.ticketNumber = it.ticketNumber
//
//                        
//                            if (settings.config?.isMultvcleOrdersEnabled == true && it.equipment.size > 0) {
//                                // needed for printing the overall summary ticket
//                                order.equipment = it.equipment
//                                order.atMeasurement = it.atMeasurement
//                            }
//                        }
//
//                        app.saveState()
//                        fllingCompleteSuccess(logTimed)
//                        app.flOrderStateMachine.trigger(flOrderStateMachine.Events.onfllingComplete)
//
//                        showEditableFlagsDialogIfrequired()
//                    } else {
//                        fllingCompleteError(logTimed,currentStatus)
//                    }
//
//                    view?.legacyUpdateView()
//                },//                { e: Throwable ->
//                    fllingCompleteError(logTimed,currentStatus)
//                    view?.legacyUpdateView()
//                }
//            )

如果您对我在哪里做错了任何想法,将会非常有帮助

谢谢 R

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...