gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:34:06 25 4
gpt4 key购买 nike

我正在使用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,Boolean],实际:BulkRequest
类型不匹配,预期:MockParameter [BulkRequest],实际:BulkRequest


我究竟做错了什么?我应该如何测试我的应用程序代码?我该如何 mock 客户?

谢谢

最佳答案

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

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()
}

关于unit-testing - 模拟elastic4s客户端获取类型不匹配,如何模拟elastic4s客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com