问题描述
最初是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 (将#修改为@)