模拟elastic4s客户端类型不匹配,如何模拟elastic4s客户端

时间:2018-12-18 10:30:33

标签: unit-testing elasticsearch scalatest elastic4s scalamock

我正在使用elastic4s作为对ElasticSearch的访问层,并且试图在我的应用程序中编写一些单元测试。我正在使用scalaMock作为我的模拟库。我想模拟elastic4s client.execute函数,以便能够测试我的代码。

这是经过测试的代码:

def insert(elasticDbConnection: ElasticClient, entIndexName: String, entTypingName: String, autoId: String, newJsonEntVal: String): Option[List[String]] = {

    import com.sksamuel.elastic4s.http.ElasticDsl._
    val req: IndexRequest = indexInto(index = entIndexName, `type` = entTypingName)
        .id(id = autoId).source(newJsonEntVal).refreshImmediately

    val insertRequests: List[IndexRequest] = List(req)

    val execRes: Future[Response[BulkResponse]] = elasticDbConnection.execute(bulk(insertRequests))

    val insertRes: BulkResponse = execRes.await.result

    val insertedEnts = insertRes.successes.map(resItem => resItem.id).toList

    Some(insertedEnts)
}

现在单元测试代码为:

...
import com.sksamuel.elastic4s.http.ElasticDsl._

val execRes: Future[Response[BulkResponse]]= mock[Future[Response[BulkResponse]]]
val elasticClientMock = mock[ElasticClient]
(elasticClientMock.execute _).expects(_:BulkRequest).returns(execRes).once()

testElasticsDal.insert(elasticClientMock, "indexName", "entType", "test-id", "{testField:\"testValue\"}")

我遇到错误:“ 类型不匹配,预期:FunctionAdapter1 [BulkRequest,布尔值],实际:BulkRequest 类型不匹配,预期:MockParameter [BulkRequest],实际:BulkRequest

我在做什么错?我应该如何测试我的应用程序代码?以及我该如何嘲笑客户?

谢谢

1 个答案:

答案 0 :(得分:0)

这不是最令人愉悦的眼睛,但这应该可以帮助您入门。 重要的部分是阐明所有隐式参数,并在定义预期的调用时使它们明确。我发明了虚拟类来展示一个最小的示例,而不是将其与实际的elastic4s东西相混淆。

'[^A-Za-z0-9-|:_]+'