我试图将Scala系统移植到Mockito2。有一些测试用例使用if
,现在在Mockito if
我收到此错误:
doReturn
查看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
地球上的这一点并不总是含糊不清的?如何编译?
由于
答案 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()