簡體   English   中英

使用Mockito具有功能參數的模擬Scala方法

[英]Mocking scala method with functional parameter using Mockito

使用Finatra並嘗試模擬數據庫調用以進行測試。 我正在使用finagle-postgres定義此方法:

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

使用Mockito其他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的新手,我還沒有找到模擬帶有函數參數的函數的示例。 對我的模擬錯誤有任何想法嗎?

我會說使用任何“模擬”框架在scala中都是一個危險信號。 理想情況下,您應該能夠通過提供自己的客戶端實現來“模擬”。

class MockMysqlClient extends Client {
...
}

只需重寫/實現應該從數據庫返回值的方法。

如果您想直接使用該方法,則可以執行以下操作

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

無論發生什么都會返回<whatever you want>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM