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



我正在尝试将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 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.javadoReturn真的是那样超载了:

public static Stubber doReturn(Object toBeReturned) 
public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext)

这到底怎么不总是模棱两可的?如何编译?

谢谢

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

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()

在 Scala 积压工作中有一个票证。 见 https://github.com/scala/bug/issues/4775

这有点自我推销,但我刚刚发布了一个名为mockito-scala的库,它解决了这个问题以及更多问题,是 mockito 生态系统的一部分,所以希望在使用 Scala 时应该成为默认值,你可以在这里找到它 https://github.com/mockito/mockito-scala 获取依赖项的信息以及它实际解决了什么问题。

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

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

我改变了未来的表达方式,只是因为这是创造完整未来的正确方式

相关内容

  • 没有找到相关文章

最新更新