如何忽略传递给被嘲笑的方法的论点

  • 本文关键字:方法 何忽略 scala mockito
  • 更新时间 :
  • 英文 :


我正在使用Mockito测试我的scalaplay代码。我的代码使用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)))

mockito中的scala代码指定any的方法是什么?

在我的build.sbt中。我只下载了mockito-core。我还需要其他东西吗?

"org.mockito" % "mockito-core" % "2.24.5" % "test"

您可以使用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

更新:

如果MatchersMockito 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)
  }

希望它有帮助!

尝试any[User]而不是any()

我要说的是,要避免这种情况以及与Scala-Java互操作性有关的许多其他问题,您应该将其使用Scala版本(Mockito-Scala),之后特质org.mockito.ArgumentMatchersSugar您可以写

when(mockUserRepository.save(*)).thenReturn(Future(Some(user)))

或者您喜欢更类似Scala的语法

mockUserRepository.save(*) shouldReturn Future(Some(user))

检查读数以查看更多示例和Scala特定功能

相关内容

  • 没有找到相关文章

最新更新