postgresql - 使用 Mockito 模拟具有功能参数的 Scala 方法

标签 postgresql scala unit-testing mockito finagle

使用 Finatra 并尝试模拟数据库调用以进行测试。我正在使用定义此方法的 finagle-postgres:

def prepareAndQuery[T](sql: String, params: Any*)(f: Row => T): Future[Seq[T]] = {...}

使用 Mockito 的其他模拟非常简单。但是,我似乎无法让这个工作。在与编译器斗争之后,我终于找到了这个,但它在运行时不起作用:

case class Foo( a: Int, b: Int, c: Int )
val client = smartMock[Client]
def f(row:Row): Foo = {
  Foo(1,2,3)
}
client.prepareAndQuery[Foo]("select 1") returns { x => f(x) }

执行测试抛出:

org.mockito.exceptions.verification.SmartNullPointerException: 
...
because this method call was *not* stubbed correctly:

我是 Mockito 的新手,我还没有找到模拟采用函数参数的函数的示例。关于我的模拟是错误的有什么想法吗?

最佳答案

如果你想要该方法的直接 stub ,那么你可以做类似的事情

val client = mock[Client]
when(client.prepareAndQuery[Foo](any, any)(any)) thenReturn Future.successful(<whatever you want>)

这将返回 <whatever you want>不管怎样

关于postgresql - 使用 Mockito 模拟具有功能参数的 Scala 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190945/

相关文章:

scala - 如何正确地对这个 HList 进行类型注释?

scala - 如何获得 Future[Seq[Person]] 而不是 Seq[Future[Person]]

java - PowerMock在queue.add方法中抛出空指针异常

python - 单元测试Python Azure函数: How do I construct a mock test request message with a JSON payload?

javascript - `before()` 和 `beforeEach()` 有什么区别?

postgresql - 如何通过 Kubernetes statefulset 环境变量更改 Postgresql max_connections 配置?

python - 如何重现由 sqlalchemy session 缓存引起的错误

postgresql - 使用 Postgres 在 HugSQL 或 YesSQL 中转换多个值

ruby - 缓慢的 Ruby DataMapper.setup

python - 我们应该为一群DBA采用哪种跨平台脚本语言?