Я не совсем новичок в разработке 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)
}
}
p>
Как уже говорилось ранее, я пытался создать как модульные, так и инструментированные тесты, но тесты функций столкнулись со многими проблемами в обоих сценариях из-за их сильной зависимости от внешнего кода. Кроме того, корректировка исходного кода и абстрагирование вызовов с помощью интерфейса для имитации значений приводит к настолько сильному издевательству, что реальная функциональность никогда не будет протестирована.
Мне просто нужно знать правильный подход к принять, или единственный путь — метод проб и ошибок.
Спасибо, что уделили время.
Подробнее здесь: https://stackoverflow.com/questions/785 ... oid-studio
Мобильная версия