У меня проблемы с использованием Powermock, Mockito и Kotlin для макетирования возвращаемого значения, когда сигнатура функции, которая требует переопределения, содержит переменные.
Функция для макета / переопределения:
public BoundStatement bind(Object... values);
Тестовый файл:
class DbSessionTest {
var preparedStatement: PreparedStatement? = null
@Mock
var boundStatement: BoundStatement? = null
@Before
fun setup() {
initMocks(this)
whenever(preparedStatement?.bind(any())).thenReturn(boundStatement)
// Also, have tried it like this
whenever(preparedStatement?.bind(any<Array<Any>>())).thenReturn(boundStatement)
}
}
Функциональность в реальном коде называется так:
internal fun createBoundStatement(query: String, vararg params: Any): BoundStatement {
val preparedStatement = prepare(query)
val boundStatement = preparedStatement.bind(*params)
return boundStatement
}
Когда я прохожу, и varargs разыменовываются, он превращается в Object[]
.Когда массив объектов содержит все один и тот же тип, все работает нормально, но когда он содержит тип String
и тип Integer
, имитация не выполняется и возвращается null
.
Примечание: у меня естьтакже включил пакет com.nhaarman.mockito_kotlin.any
для их конкретной функции any
и anyVararg
, но это тоже не сработало.
Какой правильный способ насмешки так, чтобы независимо от типа в массиве Object,он всегда будет возвращать проверенное значение?