Ответ 1
То, как я тестирую функции расширения в классах Android на данный момент, - это насмехаться над классом Android. Я знаю, это не оптимальное решение, поскольку он издевается над тестируемым классом и требует определенных знаний о том, как работает функция (как это всегда бывает, когда насмехается), но поскольку функции расширения внутренне реализованы как статические функции, я предполагаю, что это приемлемо пока кто-то не придумает что-то лучше.
В качестве примера рассмотрим класс JsonArray
. Мы определили функцию расширения для получения последнего индекса элемента:
fun JSONArray.lastIndex() = length() - 1
Соответствующий тест (с использованием Spek рамки тестирования и mockito-kotlin).
@RunWith(JUnitPlatform::class)
object JsonExtensionTestSpec : Spek({
given("a JSON array with three entries") {
val jsonArray = mock<JSONArray> {
on { length() } doReturn 3
}
on("getting the index of the last item") {
val lastIndex = jsonArray.lastIndex()
it("should be 2") {
lastIndex shouldBe 2
}
}
}
given("a JSON array with no entries") {
val jsonArray = mock<JSONArray>({
on { length() } doReturn 0
})
on("getting the index of the last item") {
val lastIndex = jsonArray.lastIndex()
it("should be -1") {
lastIndex shouldBe -1
}
}
}
})
Трудность с вашими функциями заключается в том, что они также используют классы Android внутри. К сожалению, у меня сейчас нет решения.