Mockito doReturn:对重载定义的模糊引用

时间:2018-05-30 08:45:39

标签: java scala mockito

我试图将Scala系统移植到Mockito2。有一些测试用例使用if,现在在Mockito if我收到此错误:

doReturn

查看2.18.0Error:(34, 5) ambiguous reference to overloaded definition, both method doReturn in object Mockito of type (x$1: Any, x$2: Object*)org.mockito.stubbing.Stubber and method doReturn in object Mockito of type (x$1: Any)org.mockito.stubbing.Stubber match argument types (com.twitter.util.Future[Unit]) doReturn(Future.Unit).when(f.adapterSpy).myFunction(userData, Some(offerId), Always) 确实超载了:

Mockito.java

地球上的这一点并不总是含糊不清的?如何编译?

由于

4 个答案:

答案 0 :(得分:2)

Scala待办事项列表中有一个票证。参见https://github.com/scala/bug/issues/4775

答案 1 :(得分:2)

作为临时解决方法,您可以执行以下操作:

trait MockitoHelper extends MockitoSugar {
  def doReturn(toBeReturned: Any): Stubber = {
    Mockito.doReturn(toBeReturned, Nil: _*)
  }
}

然后在此MockitoHelper中进行测试。

答案 2 :(得分:1)

这有点自我提升,但是我刚刚发布了一个名为mockito-scala的库,它解决了这个问题,并且是mockito生态系统的一部分,因此希望在与Scala一起工作时成为默认方法,您可以找到https://github.com/mockito/mockito-scala中包含获取依赖项的信息以及它实际上解决了什么问题。

专门针对您的问题,您可以编写此代码,它可以立即使用

doReturn(Future.successful(())).when(f.adapterSpy).myFunction(userData, Some(offerId), Always)

我改变了表达未来的方式,只是因为这是创建一个完整的单位未来的正确方法

答案 3 :(得分:0)

这也可以通过使用doAnswer而不是doReturn

来克服。
// no good
doReturn(true).when(foo).bar()
// works
doAnswer(_ => true).when(foo).bar()