[英]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.