【问题标题】:Kotlin Mockito always return object passed as an argumentKotlin Mockito 总是返回作为参数传递的对象
【发布时间】:2019-08-18 20:30:49
【问题描述】:

我试图在我的模拟对象上使用 Mockito,使其始终返回作为参数传入的相同对象。我试过这样做:

private val dal = mockk<UserDal> {
    Mockito.`when`(insert(any())).thenAnswer { doAnswer { i -> i.arguments[0] } }
}

但是,这条线总是失败:

io.mockk.MockKException: no answer found for: UserDal(#1).insert(null)

insert(user: User) 方法不接受null 作为参数(显然User 不是可空类型)。

如何使insert() 方法始终返回它作为参数接收的相同对象?

【问题讨论】:

  • 您是否在测试代码中创建并传递了user?或者它是在被测代码的其他地方创建的?
  • @ArnaudClaudel 我在测试代码中创建并传递它。但是设置行不在实际测试中,它在测试类的顶部,在任何测试之前。
  • 然后在测试中添加一行,在调用 insert() 时返回特定实例。我不认为这是一个糟糕的设计
  • @ArnaudClaudel 这不是我想要的,尤其是没有回答我的问题。
  • 来自 MockK 的公共 API(我在 1.9.1 版本中使用它)。见github.com/mockk/mockk/blob/…

标签: java kotlin junit mockito mockk


【解决方案1】:

当你使用 MockK 时,你不应该使用 Mockito

只有使用 MockK 才能达到同样的效果:

val dal = mockk<UserDal> {
    every { insert(any()) } returnsArgument 0
}

如果你打算使用 Mockito,你应该删除 MockK 并使用mockito-kotlin:

val dal = mock<UserDal> {
    on { insert(any()) } doAnswer { it.arguments[0] }
}

【讨论】:

    猜你喜欢
    • 2014-12-28
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多