En aquest tema, aprendrem com realitzar proves i depuració en aplicacions Android desenvolupades amb Kotlin. Les proves i la depuració són parts essencials del cicle de desenvolupament de programari, ja que ens ajuden a assegurar-nos que el nostre codi funciona correctament i a identificar i corregir errors.
Continguts
Introducció a les Proves
Les proves són un procés sistemàtic per verificar que el nostre codi compleix amb els requisits especificats i funciona com s'espera. Les proves poden ajudar a detectar errors abans que el codi arribi als usuaris finals, millorant així la qualitat del programari.
Tipus de Proves
Hi ha diversos tipus de proves que podem realitzar en una aplicació Android:
- Proves Unitàries: Verifiquen la funcionalitat de components individuals del codi, com ara funcions o mètodes.
- Proves d'Integració: Verifiquen que diferents components del sistema funcionen correctament junts.
- Proves d'Interfície d'Usuari (UI): Verifiquen que la interfície d'usuari de l'aplicació funciona correctament i que els usuaris poden interactuar amb ella com s'espera.
- Proves de Rendiment: Mesuren el rendiment de l'aplicació sota diferents condicions de càrrega.
Eines de Proves en Android
Android proporciona diverses eines per ajudar-nos a realitzar proves:
- JUnit: Una biblioteca per escriure proves unitàries.
- Espresso: Una biblioteca per escriure proves d'interfície d'usuari.
- Robolectric: Una biblioteca per executar proves unitàries en un entorn JVM en lloc d'un dispositiu Android.
Escriure Proves Unitàries amb JUnit
JUnit és una de les biblioteques més populars per escriure proves unitàries en Java i Kotlin. A continuació, veurem un exemple de com escriure una prova unitària amb JUnit.
Exemple de Prova Unitària
import org.junit.Assert.assertEquals import org.junit.Test class CalculatorTest { @Test fun addition_isCorrect() { val calculator = Calculator() val result = calculator.add(2, 3) assertEquals(5, result) } } class Calculator { fun add(a: Int, b: Int): Int { return a + b } }
Explicació
- Importació de JUnit: Importem les classes necessàries de JUnit.
- Definició de la Prova: Definim una classe de prova
CalculatorTest
amb un mètode de provaaddition_isCorrect
. - Creació de l'Objecte: Creem una instància de la classe
Calculator
. - Execució de la Funció: Executem la funció
add
amb els valors2
i3
. - Verificació del Resultat: Utilitzem
assertEquals
per verificar que el resultat és5
.
Proves d'Interfície d'Usuari amb Espresso
Espresso és una biblioteca per escriure proves d'interfície d'usuari en aplicacions Android. A continuació, veurem un exemple de com escriure una prova d'interfície d'usuari amb Espresso.
Exemple de Prova d'Interfície d'Usuari
import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.rule.ActivityTestRule import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class MainActivityTest { @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun buttonClick_changesText() { onView(withId(R.id.button)).perform(click()) onView(withId(R.id.textView)).check(matches(withText("Hello, World!"))) } }
Explicació
- Importació d'Espresso: Importem les classes necessàries d'Espresso.
- Definició de la Prova: Definim una classe de prova
MainActivityTest
amb un mètode de provabuttonClick_changesText
. - Regla d'Activitat: Utilitzem
ActivityTestRule
per especificar l'activitat que es provarà. - Interacció amb la Vista: Utilitzem
onView
per trobar la vista amb l'IDR.id.button
i fem clic sobre ella. - Verificació del Canvi de Text: Utilitzem
onView
per trobar la vista amb l'IDR.id.textView
i verifiquem que el text ha canviat a "Hello, World!".
Depuració en Android Studio
Android Studio proporciona diverses eines per ajudar-nos a depurar el nostre codi:
- Logcat: Mostra els missatges de registre de l'aplicació.
- Breakpoints: Permeten aturar l'execució del codi en un punt específic per inspeccionar l'estat de l'aplicació.
- Debugger: Permet executar el codi pas a pas i inspeccionar variables i expressions.
Exemple de Depuració
- Afegir un Breakpoint: Feu clic a la vora esquerra del codi per afegir un breakpoint.
- Executar en Mode de Depuració: Feu clic a la icona de depuració per executar l'aplicació en mode de depuració.
- Inspeccionar Variables: Quan l'execució s'aturi en el breakpoint, podeu inspeccionar les variables i expressions en el panell de depuració.
Exercicis Pràctics
- Escriure una Prova Unitària: Escriu una prova unitària per a una funció que multiplica dos nombres.
- Escriure una Prova d'Interfície d'Usuari: Escriu una prova d'interfície d'usuari que verifica que un text canvia quan es fa clic en un botó.
- Depurar un Error: Afegeix un breakpoint en una funció que no funciona correctament i utilitza el debugger per identificar l'error.
Conclusió
En aquesta secció, hem après sobre la importància de les proves i la depuració en el desenvolupament d'aplicacions Android amb Kotlin. Hem vist com escriure proves unitàries amb JUnit, proves d'interfície d'usuari amb Espresso i com utilitzar les eines de depuració d'Android Studio. Aquests coneixements ens ajudaran a assegurar-nos que el nostre codi és robust i lliure d'errors.
Curs de Programació en Kotlin
Mòdul 1: Introducció a Kotlin
- Introducció a Kotlin
- Configuració de l'Entorn de Desenvolupament
- Conceptes Bàsics de Kotlin: Variables i Tipus de Dades
- Flux de Control: Condicionals i Bucles
- Funcions i Lambdas
Mòdul 2: Programació Orientada a Objectes en Kotlin
- Classes i Objectes
- Herència i Interfícies
- Modificadors de Visibilitat
- Classes de Dades i Classes Segellades
- Declaracions d'Objectes i Objectes Companys
Mòdul 3: Funcions Avançades de Kotlin
- Col·leccions i Genèrics
- Funcions d'Extensió
- Funcions d'Ordre Superior i Programació Funcional
- Coroutines i Programació Asíncrona
- DSL (Llenguatge Específic de Domini) en Kotlin
Mòdul 4: Kotlin per al Desenvolupament d'Android
- Introducció al Desenvolupament d'Android amb Kotlin
- Construcció d'Interfícies d'Usuari
- Gestió de l'Entrada de l'Usuari
- Xarxes i Emmagatzematge de Dades
- Proves i Depuració