【问题标题】:io.mockk.MockKException: no answer found when mocking list of objects with ObjectMapper.readValue() using mockk?io.mockk.MockKException:使用 mockk 使用 ObjectMapper.readValue() 模拟对象列表时找不到答案?
【发布时间】:2020-08-22 16:30:41
【问题描述】:

有类似的问题,但没有专门处理 kotlin、mock 和使用 objectMapper.readValue 读取对象列表。

给定一个方法:

fun someMethod(message: Message): List<Animal> = objectMapper.readValue(
        String(message.body),
        object : TypeReference<List<Animal>>() {}
)

我试图在这里模拟它:

@Test
fun `test you filthy animals`() {
    ...
    val animals: List<Animal> = emptyList()
    every { objectMapper.readValue<List<Animal>>(
       any<String>(), 
       any<Class<List<Animal>>>()
    ) } returns animals
    ...
}

但这没有用。我收到以下错误:

io.mockk.MockKException: no answer found for: ObjectMapper(#72).readValue(
     somebody,  
     be.kind.to.Nature$someMethod$animals$1@46b2a11a
)

暂停。

【问题讨论】:

  • 一方面,很好地解决了这个问题!但值得深思的是:也许嘲笑您解析 Json 的方式可能不是您的用例的最佳实践。创建假 jsons 而不是模拟对象映射器本身,这可能会改善您的测试代码库
  • 我将您的建议铭记于心,并会考虑您的意见。当然,我已经创建了一个玩具示例,但是在这个 particular 测试的实际代码库中,更容易指出我不太关心 json 的确切内容。但这并不意味着您在总体策略方面仍然可能是正确的。

标签: kotlin mocking objectmapper mockk


【解决方案1】:

我花了很长时间来解决这个问题,但在这里分享它是为了繁荣!

@Test
fun `test you filthy animals`() {
    ...
    val animals: List<Animal> = emptyList()
    every { objectMapper.readValue<List<Animal>>(
       any<String>(), 
       any<TypeReference<List<Animal>>>()
    ) } returns animals
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-02-22
    • 2019-03-15
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多