Насмешливый клиент astic4s, получающий несоответствие типов, Как издеваться над клиентом astic4s

Я использую эластичные слои как слой доступа к ElasticSearch, и я пытаюсь написать несколько модульных тестов в своем приложении. Я использую scalaMock в качестве библиотеки для насмешек. Я хочу издеваться над функцией astic4s 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"

Что я делаю неправильно? Как мне проверить мой код приложения? и как я должен издеваться над клиентом?

Спасибо

1 ответ

Это не самый приятный для глаз, но это должно начать вас. Важная часть состоит в том, чтобы изложить все неявные параметры и сделать их явными при определении ожидаемых вызовов. Я изобрел фиктивные классы, чтобы показать минимальный пример, а не свести его с фактическим материалом упругости.

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()
}
Другие вопросы по тегам