Я столкнулся со странным поведением с Mockito.
Инициализация теста:
private val dao = Mockito.mock(AdDetailsDao::class.java)
private val offeredResponse = Mockito.mock(AdDetailsRestResponse::class.java) as AdDetailsRestResponse<AdOffered>
Этот тест успешно завершен:
@Test
fun shouldCallWantedAdDetailsAndNotOfferedAdDetails_whenIsNotOfferedAndNotFallback(){
val handler = AdDetailsHandler(dao, false, false, CompositeDisposable())
handler.loadAd("some_id")
verify(dao).getWantedAdDetails(anyString())
verify(dao, times(0)).getOfferedAdDetails(anyString())
}
это не:
@Test
fun shouldCallOfferedAdDetailsAndWantedAdDetails_whenIsOfferedAndFallbackAndOfferedAdNotExist(){
val handler = AdDetailsHandler(dao, true, true, CompositeDisposable())
doReturn(false).`when`(offeredResponse).success
doReturn(offeredResponse).`when`(dao).getOfferedAdDetails(anyString())
handler.loadAd("some_id")
verify(dao).getWantedAdDetails(anyString())
}
Тестируемые методы (обратите внимание, что этот метод выполняется в фоновом режиме планировщиком):
private fun loadWantedTask(id: String): AdDetailsResponse {
return trackTaskDuration(AnalyticsTagsFabric.Event.AD_DETAILS_LOADED) {
val response = adDetailsDao.getWantedAdDetails(id)
AdDetailsWantedResponse(response.advert)
}
}
private fun loadOfferedWithFallbackTask(id: String): AdDetailsResponse {
return trackTaskDuration(AnalyticsTagsFabric.Event.AD_DETAILS_LOADED) {
System.out.println("task")
val response = adDetailsDao.getOfferedAdDetails(id)
System.out.println("success:" + response.success+ " obj id:"+response)
if (response.success) {
System.out.println("in offered")
AdDetailsOfferedResponse(response.advert)
}
else {
System.out.println("offered else")
val response = adDetailsDao.getWantedAdDetails(id)
System.out.println("success:" + response.success+ " obj id:"+response)
if (response.success) {
System.out.println("in wanted")
AdDetailsWantedResponse(response.advert)
} else {
System.out.println("in error")
AdDetailsErrorResponse(Exception())
}
}
}
Вывод при тестировании второго метода:
task
success:false obj id:Mock for AdDetailsRestResponse, hashCode: 991806841
offered else
вы можете ясно видеть, что доходит до того, что getWantedAdDetails () явно вызывается, но mockito говорит, что взаимодействие с макетом не происходит.
Что я делаю не так?Я думаю, что не могу смутить ответ метода макета и проверить вызов метода на том же самом макете, но я не могу понять, правда ли это, и / или найти решение.