我正在尝试将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.java
,doReturn
真的是那样超载了:
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)
我改变了未来的表达方式,只是因为这是创造完整未来的正确方式