Java Mockito doReturn:对重载定义的不明确引用

Java Mockito doReturn:对重载定义的不明确引用,java,scala,mockito,Java,Scala,Mockito,我正在尝试将Scala系统移植到Mockito2。有几个测试用例使用了doReturn,现在在Mockito2.18.0中,我得到了这个错误: Error:(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 doRetu

我正在尝试将Scala系统移植到Mockito2。有几个测试用例使用了
doReturn
,现在在Mockito
2.18.0
中,我得到了这个错误:

Error:(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
doReturn
实际上是这样重载的:

public static Stubber doReturn(Object toBeReturned) 
public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext)
这究竟是怎么不总是模棱两可的呢?如何使其编译


谢谢

Scala待办事项列表中有一张票据。参见

这是一种自我提升,但我刚刚发布了一个名为
mockito scala
的库,它解决了这个问题,而且还有很多其他问题,它是mockito生态系统的一部分,因此希望在使用scala时成为默认库,您可以在这里找到它,其中包含获取依赖关系的信息,以及它实际解决了哪些问题

特别是针对您的问题,您可以编写此代码,它将开箱即用

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

我改变了未来的表达方式,只是因为这是创建一个完整的单位未来的正确方式。作为临时解决办法,您可以执行以下操作:

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

然后让您的测试混音在这个
MockitoHelper

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

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

您好,这将更好地解释这个库将如何解决这个问题,包括代码(看看)@baptistemm好的观点,我没有在这里这样做,因为不适用于OP的完全相同的代码将在这个库中开箱即用,此外,Github页面链接还解释了所有其他功能。例如,如果引用消失,我们更希望将代码放在答案上,以避免信息丢失。@baptistemm修复了@Baptistemile Mathias很抱歉这么迂腐,但是未来的单位是合法的。。。我认为
Unit
的大写是问题中唯一的问题:)另外,感谢这里的提示-它解决了我的varargs问题w/scala!这正是mockito scala所做的,但在MockitoSugar系列中已经为您完成了。我认为您不需要在这里扩展MockitoSugar。覆盖
doReturn
就足够了。如果我错了,请纠正我:)对我来说,用Mockito.doReturn代替doReturn就足够了。