我正在使用scala
测试我的play
和Mockito
代码。我的代码使用了一个save
参数的User
方法。我不在乎传递给save
的值。我尝试将这种行为编写为如下代码
when(mockUserRepository.save(any())).thenReturn(Future(Some(user)))
但出现错误
Error:(219, 36) not found: value any
when(mockUserRepository.save(any())).thenReturn(Future(Some(user)))
在any
中为scala
代码指定mockito
的方式是什么?
在我的build.sbt
中。我只下载了mockito-core
。我还需要其他东西吗?
"org.mockito" % "mockito-core" % "2.24.5" % "test"
答案 0 :(得分:0)
尝试用any[User]
代替any()
答案 1 :(得分:0)
您可以使用org.mockito.Matchers
import org.mockito.Mockito._
import org.mockito.Matchers._
val mockUserRepository = mock[call_your_MockUserRepositiry_service]
// something like below
// val service = mock[Service[Any, Any]] OR
// val mockService = mock[MyService]
when(mockUserRepository.save(any)) thenReturn(Future(Some(user)))
请参阅https://www.programcreek.com/scala/org.mockito.Matchers
更新:
如果Matchers
中不推荐使用Mockito 2.0
,则可以使用org.mockito.ArgumentMatchers
In Java Something like below
class Foo{
boolean bool(String str, int i, Object obj) {
return false;
}
}
Foo mockFoo = mock(Foo.class);
when(mockFoo.bool(anyString(), anyInt(), any(Object.class))).thenReturn(true);
In Scala something like below
def setupService(inputResponse: Future[Unit]): AdminService = {
val mockConnector = mock[MongoConnector]
when(mockConnector.putEntry(ArgumentMatchers.any(), ArgumentMatchers.any())(ArgumentMatchers.any()))
.thenReturn(inputResponse)
new AdminService(mockConnector)
}
希望有帮助!
答案 2 :(得分:0)
我想说,为避免出现此问题以及与Scala-Java互操作性相关的许多其他问题,在混合了特征{{1}之后,您应该使用Scala版本的Mockito(mockito-scala)。 }你可以写
org.mockito.ArgumentMatchersSugar
或者,如果您喜欢更像Scala的语法
when(mockUserRepository.save(*)).thenReturn(Future(Some(user)))
检查自述文件以查看更多示例和特定于Scala的功能