io.mockk.MockKException:未找到答案,而any()用作参数

时间:2019-11-05 15:20:51

标签: kotlin mockk

目前,我正在进行单元测试,并且正在为此目的使用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")}
}

这是 incidentsBySiteKey 函数的签名

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)
   //...
}

incidentsBySiteKeyStream 函数:

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        模拟版本=> 1.8.13.kotlin13

0 个答案:

没有答案