Я пишу метод в Kotlin, который возвращает индексы elasticsearch, которым назначен псевдоним:
fun getActiveIndices(cluster: ElasticsearchCluster): List<IndexModel> {
val aliases = elasticsearchCommandExecutor.execute(GetAllAliasesCommand(cluster))
val indices = elasticsearchCommandExecutor.execute(GetAllIndicesCommand(cluster))
indices.forEach{ it.active = aliases.any { alias -> it.name == alias.index } }
return indices.filter { !it.irregular && it.active }
}
Где GetAllAliasesCommand
и GetAllIndicesCommand
являются подклассами ElasticsearchCommand<T>
. Я пытаюсь проверить поведение этого метода с помощью mockK:
@Test
fun `getActiveIndices should make correct calls`() {
val aliases = listOf(.. A list of AliasModel)
val indices = listOf(.. A list of IndexModel)
every { elasticsearchCommandExecutor.execute(any<GetAllAliasesCommand>()) } returns aliases
every { elasticsearchCommandExecutor.execute(any<GetAllIndicesCommand>()) } returns indices
val result = indexService.getActiveIndices(ElasticsearchCluster.SOME_CLUSTER)
verify { elasticsearchCommandExecutor.execute(any<GetAllAliasesCommand>()) }
verify { elasticsearchCommandExecutor.execute(any<GetAllIndicesCommand>()) }
assert(result == listOf(.. A list of IndexModel))
}
Проблема в том, что mockK не может различать any<GetAllIndicesCommand>()
и any<GetAllAliasesCommand>()
в операторе every
, поэтому оба elasticsearchCommandExecutor.execute(any<GetAllIndicesCommand>())
и elasticsearchCommandExecutor.execute(any<GetAllAliasesCommand>())
возвращают indices
. Это означает, что он применяет последний оператор every
. Есть ли способ вернуть его в зависимости от типа команды?