Как определить лучший способ тестирования функции в Android Studio?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как определить лучший способ тестирования функции в Android Studio?

Сообщение Anonymous »

Ниже представлена ​​функция нашего приложения для Android, предназначенная для обновления приложения путем новой установки его текущей версии. Однако каждый подход, который я пробовал, сталкивался со значительными препятствиями, такими как финальные классы, предотвращающие издевательство над разделами, HttpsURLConnection, требующий издевательства, Robolectric, отказывающийся запускать тесты без прямого сообщения о проблеме, неспособность инструментальных тестов имитировать значения и использование интерфейсов для предоставляют макетные значения, но вводят так много макетируемых функций, что тест больше не проверяет исходную функциональность.
Я не совсем новичок в разработке Android в целом, но у меня не так много опыта с его тестированием. Было бы очень полезно, если бы кто-нибудь сказал мне, какой подход мне следует использовать для функции ниже. Но если существует метод определения наилучшего подхода для любого конкретного кода, я считаю, что это будет очень важно для моего улучшения.
Я понимаю, что этот вопрос может быть клоном, но я Полагаю, что в настоящее время мне не хватает знаний, чтобы самому найти этот ответ, потому что я уже потратил на это полдня. На данный момент задача отложена, но в идеале хотелось бы реализовать какие-то автоматические тесты.

Код: Выделить всё

private fun doUpdate() {
if (!portal.updateIsAvailable()) {
updateStatus(getString(R.string.already_running_the_latest_version_press_play_to_start))
startBackgroundTasks()
return
}

updateStatus(getString(R.string.downloading_new_version))

val connection =
URL(portal.latestVersionDownloadUrl()).openConnection() as HttpsURLConnection
connection.sslSocketFactory = sslContext.socketFactory
connection.instanceFollowRedirects = true
connection.requestMethod = "GET"

try {
if (connection.responseCode != 200) {
updateStatus(getString(R.string.version_download_error, connection.responseMessage))
return
}

val installer = packageManager.packageInstaller
val params =
PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(packageName)
val sessionId = installer.createSession(params)
val session = installer.openSession(sessionId)

val outputStream = session.openWrite("app_data", 0, connection.contentLength.toLong())
outputStream.use { connection.inputStream.copyTo(it) }

val intentFlags =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0
val intent = PendingIntent.getBroadcast(
this,
sessionId,
Intent(INTENT_PACKAGE_INSTALLER_STATUS),
intentFlags
)
session.commit(intent.intentSender)
} catch (e: Exception) {
updateStatus(getString(R.string.update_error) + e.message)
Log.e("update", "update failed", e)
}
}
(под контекстным порталом подразумевается окончательный класс Kotlin, содержащий код для взаимодействия с API, и мне нужно убедиться, что проект остается в основном на Kotlin + совместимым с Android 5.1–11)
p>
Как уже говорилось ранее, я пытался создать как модульные, так и инструментированные тесты, но тесты функций столкнулись со многими проблемами в обоих сценариях из-за их сильной зависимости от внешнего кода. Кроме того, корректировка исходного кода и абстрагирование вызовов с помощью интерфейса для имитации значений приводит к настолько сильному издевательству, что реальная функциональность никогда не будет протестирована.
Мне просто нужно знать правильный подход к принять, или единственный путь — метод проб и ошибок.
Спасибо, что уделили время.

Подробнее здесь: https://stackoverflow.com/questions/785 ... oid-studio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»