io.mockk.MockKException: ответ не найден, тогда как any () используется в качестве аргумента - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я работаю над юнит-тестами и для этой цели использую Mockk.

Вот как выглядит мой юнит-тест (я поставлю самые важные строки)

@Test
fun `Test computeDowntimesOverPeriod with starting uptime`() {
   every {incidentRepository.incidentsBySiteKey(any(), any(), or(ofType(String::class), isNull()))} returns buildIncidentsStream(5)

   mockSAT123Mapping()

   val timeIntervals = incidentManager.computeDowntimesOverPeriod("SAT.123", Period.ofWeeks(1))

   //...

   verify(exactly=1) {incidentRepository.incidentsBySiteKey(Period.ofDays(7),15, "asc")}
}

Вот подпись функции инцидентовBySiteKey

fun incidentsBySiteKey(period: Period, siteId: Int?, order: String = "asc"): Stream<Incident>

Для computeDowntimesOverPeriod функции

open fun computeDowntimesOverPeriod(siteKey: String, period: Period): List<StatusTimeInterval> {
   //...
   val downtimes = incidentsBySiteKeyStream(siteKey, period)
   //...
}

инцидентовBySiteKeyStream function:

private fun incidentsBySiteKeyStream(siteKey: String, period: Period, order: String = "asc"): Optional<Stream<Incident>> {
   Objects.requireNonNull(period)
   return if (StringUtils.isEmpty(siteKey)) {
      Optional.of(Stream.empty())
   } else siteMapper.fromCMMSKey(siteKey)
      .flatMap { it.toUtId() }
      .map { siteId -> incidentRepository.incidentsBySiteKey(period, siteId, order).filter { equipmentRepository.findById(it.equipmentId).get().weight > 0 } }

}

Как вы можете видеть, в функции computeDowntimesOverPeriod мы используем функцию incidentsBySiteKey . Итак, в тесте логично проверить, вызывается ли функция. Но когда я запускаю тест, я получаю следующую ошибку:

io.mockk.MockKException: no answer found for: IncidentRepository(incidentRepository#28).incidentsBySiteKey(P7D, 15, asc)

Таким образом, мой тест не удался, когда я инициализировал переменную timeIntervals . Но почему ? Я имею в виду, у меня есть каждый блок, который должен возвращать что-то для любого аргумента.

Редактировать: версия kotlin => версия 1.3.31 mockk => 1.8.13.kotlin13

...