Учитывая класс, такой как класс "Target" ниже:
class Target {
fun <R> target(vararg filter: String, mapper: (String) -> R): R {
println(filter.contentDeepToString())
return mapper("target")
}
}
И тест, такой как ниже:
@Test
fun test() {
val mockTarget = mock(Target::class.java)
Mockito.`when`(mockTarget.target<Int>("Hello World", any<(String) -> Int>()))
.thenReturn(1)
}
Я получаю Type mismatch: inferred type is ((String) -> Int)! but String was expected
.
Я знаю, что vararg обычно идет до конца функции, на самом деле, если вы перемещаете vararg в конец, он компилируется.
Как только mockito смотрит на байт-код, мне интересно, возможно ли использовать mockito в таком нечетном методе.
Edit
Код работает так, как ожидалось, проблемаслучается только при попытке издеваться.
fun main(args: Array<String>) {
val result = Target().target("Hello World") {
123
}
println("$result == 123? ${result == 123}")
}
// out:
// [Hello World]
// 123 == 123? true