【发布时间】:2019-09-26 10:23:41
【问题描述】:
我已经使用 Kotlin 和 MVP 架构开发了一个应用程序。我想使用 Mockito 进行单元测试,但无法实现。我得到“但是,这个模拟异常只有 1 次交互”。 在我的应用程序中,我使用了 5 个不同的类。
- 视图 - 界面
- Intractor - 界面
- IntractorImpl - 类
- 演示者 - 界面
- PresenterImpl - 类
View:-它包含了通信活动/片段所需的所有方法。
Intractor:-它包含结果接口方法。
IntractorImpl :- 它包含数据库/服务器逻辑,它将从 Intractor 实现
Presenter :- 它包含访问 IntractorImpl 类的方法
PresenterImpl :- 它由 Presenter 和 Intractor 结果方法实现
我遵循这个架构来实现,现在要实现 Mockito,我感到很困惑,根据我在谷歌找到的文章,如果我尝试实现,我会得到 “但是,只有 1 次交互有这个模拟异常”
对于 mockito,我使用了以下导入
//Mockito
testImplementation "org.mockito:mockito-core:2.24.5"
testImplementation "org.mockito:mockito-inline:2.24.5"
如果有人知道,请帮助我。我第一次使用 Mokito。 如果有人需要更多信息,我可以发布它。以下是我的代码
class EventTest {
@Mock
val homeActivity = HomeActivity()
lateinit var eventView: HomeView
lateinit var eventInteractorImpl: HomeInteractorImpl
lateinit var eventPresenter: HomePresenter
lateinit var eventInteractor: HomeInteractor.OnEventsReceivedListener
@Before
fun setUpEventPresenter() {
eventView = mock(HomeView::class.java)
eventInteractorImpl = mock(HomeInteractorImpl::class.java)
eventPresenter = HomePresenterImpl(eventView, eventInteractorImpl)
eventInteractor = mock(HomeInteractor.OnEventsReceivedListener::class.java)
}
@Test
fun startEventTest() {
val testEvents = Event(
"1",
"Test",
"Next week we have the vacation planing in Vizag",
"This is for test",
"1",
"01-10-2019",
"26-09-2019",
"8.00",
"10.47",
"",
true
)
val events: ArrayList<Event> = ArrayList<Event>()
events.add(testEvents)
eventPresenter.getEventsList(homeActivity)
verify(eventView).showProgress()
verify(eventView).showEvents(events)
verify(eventView).hideProgress()
}
}
如果我输入verify(eventView).showProgress(),则不会出现异常。
override fun getEventsList(context: Context) {
homeView.showProgress()
homeInteractor.getEvents(context, this)
}
在 getEvents() 方法中,我们调用服务器/本地数据库,对于服务器,我们使用 Retrofit。
【问题讨论】:
-
能否添加getEventsList函数的代码?
-
@NatigBabayev 在 getEventsList 函数中我正在调用 Intractor 方法以从服务器/本地数据库获取数据
-
@NatigBabayev 我的应用程序 MVP 几乎类似于这个medium.com/@MiBLT/refactoring-to-mvp-b504a3774ffd
-
如果不发布
getEventsList(),我认为我们无法就测试失败的原因提供任何帮助。另外,我已经通过了免费文章限制,所以,我无法检查那个帖子:D 你可以在这里发布代码。 -
@我已经更新了代码,请检查一次。