如何忽略传递给模拟方法的参数

时间:2019-03-08 22:13:30

标签: scala mockito

我正在使用scala测试我的playMockito代码。我的代码使用了一个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"

3 个答案:

答案 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的功能