Я реализую метод, который удаляет псевдонимы из индекса в Elasticsearch. Чтобы проверить, что метод выполняет запрос к Elasticsearch с желаемыми параметрами, я пишу модульный тест с использованием библиотеки mockK. Однако сигнатура org.apache.http.nio.entity.NStringEntity
сигнатуры конструктора класса не совпадает в модульном тесте, даже если существует только один такой конструктор (public NStringEntity(final String s, final ContentType contentType)
). Любые идеи, как это исправить?
Вот метод:
override fun removeFromIndex(context: IndexContext, providedAliases: List<String>?) {
val aliasesToRemove = providedAliases ?: getByIndex(context)
val params: Map<String, String> = emptyMap()
for (alias in aliasesToRemove) {
val jsonString = IndexToAliasModel(context.index, alias).toJSONString("remove")
val entity = NStringEntity(jsonString, ContentType.APPLICATION_JSON)
esClientConf[context.cluster].performRequest("POST", "_aliases/", params, entity)
}
}
Вот модульный тест:
@Test
fun `Removing aliases of an index performs a request`() {
val context = IndexContext(ElasticsearchCluster.AUX, index="dummyIndex")
val providedAliases = listOf("dummyAlias1")
val esResponse = mockk<Response>()
mockkConstructor(NStringEntity::class)
val nStringEntity = mockk<NStringEntity>()
every { NStringEntity(any(), ContentType.APPLICATION_JSON) } returns nStringEntity
every { esClientConf[ElasticsearchCluster.AUX].performRequest(any(), any(), emptyMap<String, String>(), nStringEntity) } returns esResponse
esAliasService.removeFromIndex(context, providedAliases)
verify { esClientConf[ElasticsearchCluster.AUX].performRequest("POST", "_aliases/", emptyMap<String, String>(), nStringEntity) }
}
Я получаю следующую ошибку в строке every { NStringEntity(any(), ContentType.APPLICATION_JSON) } returns nStringEntity
:
io.mockk.MockKException: Failed matching mocking signature for
left matchers: [any()]
at io.mockk.impl.recording.SignatureMatcherDetector.detect(SignatureMatcherDetector.kt:99)
at io.mockk.impl.recording.states.RecordingState.signMatchers(RecordingState.kt:39)
at io.mockk.impl.recording.states.RecordingState.round(RecordingState.kt:31)
at io.mockk.impl.recording.CommonCallRecorder.round(CommonCallRecorder.kt:50)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:59)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:30)
at io.mockk.MockKDsl.internalEvery(API.kt:92)
at io.mockk.MockKKt.every(MockK.kt:104)
(esClientConf[context.cluster]
возвращает экземпляр Elasticsearch RestClient
.)