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



我正在使用elastic4s作为我对ElasticSearch的访问层,并且我正在尝试在我的应用程序中编写一些单元测试。我正在使用scalaMock作为我的嘲讽库。我想模拟elastic4sclient.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">

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

谢谢

这不是最令人愉快的,但这应该让你开始。重要的部分是拼写出所有隐含的参数,并在定义预期调用时使它们显式。我发明了虚拟类来展示一个最小的例子,而不是将其与实际的弹性体进行卷积。

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

相关内容

  • 没有找到相关文章

最新更新