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

tja*_*and 6 java scala mockito

我正在尝试将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)
Run Code Online (Sandbox Code Playgroud)

进入Mockito.javadoReturn确实像这样超载:

public static Stubber doReturn(Object toBeReturned) 
public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext)
Run Code Online (Sandbox Code Playgroud)

这在地球上怎么不总是模棱两可?如何进行编译?

谢谢

rei*_*kje 9

Scala backlog 中有一张票。见https://github.com/scala/bug/issues/4775


Jax*_*sun 7

这也可以通过使用doAnswer代替doReturn

// no good
doReturn(true).when(foo).bar()
// works
doAnswer(_ => true).when(foo).bar()
Run Code Online (Sandbox Code Playgroud)


ssg*_*gao 5

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

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

然后让您的测试混入此MockitoHelper