首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟elastic4s客户端获取类型不匹配,如何模拟elastic4s客户端

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

Stack Overflow用户
提问于 2018-12-18 10:30:32
回答 1查看 432关注 0票数 0

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

这是经过测试的代码:

代码语言:javascript
复制
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)
}

现在单元测试代码是:

代码语言:javascript
复制
...
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\"}")

我得到一个错误:“类型不匹配,预期: FunctionAdapter1BulkRequest,布尔值,实际: BulkRequest类型错配,预期: MockParameterBulkRequest,实际: BulkRequest

我做错了什么?如何测试我的应用程序代码?我该怎么嘲笑客户呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-12-28 00:18:53

它不是最令人愉快的眼睛,但这应该会让你开始。重要的部分是在定义预期调用时,详细说明所有隐式参数,并使其显式化。我发明了虚拟类来展示一个最小的例子,而不是用实际的elastic4s来解决这个问题。

代码语言:javascript
复制
class BulkResponse
class Response[T]
class ImplicitFoo
abstract class Foo {
  def ex2[T, U](t: T)(implicit foo: ImplicitFoo): Response[U]
}

"A test" can "mock implicit params" in {
  val foo = mock[Foo]
  (foo.ex2[BulkResponse, String](_: BulkResponse)(_: ImplicitFoo)).expects(*, *).returns(new Response[String]).once()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53831049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档