kotlin - io.mockk.MockKException: no answer found for while any() 用作参数
问题描述
目前,我正在进行单元测试,为此我正在使用 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)
//...
}
eventsBySiteKeyStream函数:
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
解决方案
推荐阅读
- java - JPA 存储库方法 findByField 返回所有数据
- facebook - Facebook 评论数与从 Facebook API 实际检索到的内容之间的差异
- java - 如何在java中制作“结束游戏”方法
- graphql - How can I log resolver/operation name and duration in HotChocolate?
- javascript - 更改组件后如何修复无限滚动逻辑?
- mysql - 提高数据库查询性能和内存使用率列出所有数据 laravel
- html - 如何在rails中进行下拉?
- video.js - video.js 和内容安全策略 (CSP) 的问题
- c# - 使用 asp.net,如何获取 WebRequest 对象的状态?
- azure-powershell - ARM模板deploymentScript PowerShell try catch被忽略?