Android/Espresso Test: diferència entre les revisions

Contingut suprimit Contingut afegit
Removing "Android_Espresso_en_funcionament.webm", it has been deleted from Commons by INeverCry because: No permission since 28 October 2016.
m Revisió ortogràfica
Línia 1:
== Introducció ==
=== Què és el testeig d’aplicacions? ===
El testeig d’una aplicació consisteix en oferir al programador una manera còmoda, però complexa i llarga d'implementar, de poder provar totes les utilitats que oferirà l’aplicació ala l'usuari. D'aquesta manera, podem perfilar la nostrenostra aplicació de tal manera que evitem que el usuari que la farà servir no es trobarà cap situació inesperada mentre interactua amb la mateixa. I aquí és on entra l'eina Espresso, que vindria a ser una de les opcions que ens ofereix Android per fer testeig, entre totes les que hi han.
 
Espresso és una eina que permet fer el testeig de les teves aplicacions de manera totalment automatitzada, simulant el comportament que tindria una persona normal i corrent. Normalment, aprofitem i anem una mica més enllà per prevenir qualsevol tipus de falla en la sistema que pugui aparèixer per casos no contemplats. A més a més, s'ha de tenir en compte que cada conjunt de proves que es vol aplicar a una app, requereix una eina diferent i personalitzada per cadascuna. Aquesta eina es pot implementar gracies a la llibreriab iblioteca Android Testing Support, fàcilment incorporable al nostre entorn, sempre hi quan, estiguem programant sobre una versió superior o igual al Android 2.2 i amb nivell d’API 8 o superior.
 
=== Per què fer servir Espresso? ===
Cal destacar que aquesta eina, a diferencia de les demésaltres, actua en sincronització automàtica amb les accions de la interfície que veu el usuari. D’aquesta manera, Espresso “veu” quins son els fils que s’estan executant en cada moment i pot fer una execució més semblant a la que feriafaria una persona a mà. La diferencia amb elsla demésresta de programes de proves esés que pot ometre el fet de posar en espera els threads que no anirà a fer servir durant un temps.
 
== Posta a punt ==
Per poder programar la interfície Espresso, abans de tot necessitarem incorporar al nostre entorn de programació les dependències a les llibreriesbiblioteques en qüestiónecessàries. En aquestes llibreriesbiblioteques es troba tota la informació i els mètodes que necessitarem més endavant. A més a més, haurem de preparar una mica el l'entorn sobre el que treballarem per evitar possibles errors d'execució, i tenir coneixement de quequè podem fer en cada moment.
 
Primer de tot, tenimhem quede preparar el nostre entorn de treball, és a dir, fer unes modificacions a la màquina on farem corres'executarà l'aplicació. Ja sigui una virtual o una física, no importa, els canvis a fer són els mateixos.
 
=== Inhabilitació d'animacions ===
=== De la nostra màquina Android ===
Es recomana deshabilitar les animacions del nostre dispositiu a l'hora de fer les proves. Si les deixéssim habilitades, podria donar-se el cas de rebre resultats inesperats o que l’aplicació deixés de funcionar.
Les opcions que tenimhem quede deshabilitar son:
- Window animation scale
- Transition animation scale
Línia 21:
[[File:Configuracio.png|thumb|Configuració del entorn de treball]]
 
=== DelsDependències imports necessarisnecessàries ===
 
Tot seguit,hem tenim quede dirigir-nos al fitxer build.gradle(Module App), que es troba dintre del projecte generat amb AndroidStudio de manera automàtica, i hi incorporarem les sentencies següents en ell. Quedant com a resultat:
<syntaxhighlight lang="groovy">
defaultConfig{
Línia 48:
 
Dintre d'aquesta nova classe, és on implementarem cadascuna de les proves que farem servir sobre l'aplicació a testejar. Aquesta nova classe, haurà de tenir una estructura similar a la següent:
* Declaració de les diferents llibreriesbiblioteques que necessitarem (la captura de pantalla correspon a un cas en particular,; diversesen funcionscada requereixencas decaldrà diversosfer els imports de les funcions utilitzades)
 
[[File:Llibreries.png|cap|Llibreries del projecte]]
Línia 61:
 
* @Rules: aquesta etiqueta l'utilitzarem per dir-li al test sobre quina classe volem aplicar les proves que escriurem més endavant.
* @Before: aquesta etiqueta la farem servir per inicialitzar tot el que necessitem abans de que l'aplicació comenci a testejar.
* @Test: tota funció que tingui aquesta etiqueta serà una prova que executarà l'aplicació de testeig.
 
Dintre de les funcions amb l'etiqueta @Test, haurem de definir les accions que executarà l'aplicació utilitzant uns mètodes en concret que Espresso ens ofereix de base. Utilitzant-les, podrem tant generar accions com si fóssim el l'usuari i comprovar-ne el resultat.
 
Per poder simular la interacció humana, tenimhem quede seguir una estructura, la qualsegüent constaestructura deamb 3tres parts principals:
* Identificar la View sobre la que aplicarem les proves
* Generar l'acció pertinent sobre la View
* Recuperar el resultat obtingut
 
Per identificar una View, utilitzarem el mètode onView(), que és qui retornarà la View en qüestió, en conjunt amb el mètodesmètode withId() que és el l'encarregat de definir quin paràmetre li estem passant al mètode. withId() requereix d'un paràmetre que és el l'identificador de la View que estem consultant. Per veure un exemple:
<syntaxhighlight lang="groovy">
onView(withId(R.id.edittext_view))
</syntaxhighlight>
 
Tot seguit, per generar l’acció del usuari, tenim quehem d'utilitzar el mètode ViewInteratcion.perform(), passant-li com a paràmetre l'acció que volem que s'executi. Val a dir, que com a paràmetres també n'accepta més d'un.
En la llista següent, podem trobar els diferents mètodes per executar cadascuna
de les accions que el l'usuari podrà fer dintre de la nostrenostra aplicació. Val a dir que totes estan orientades a una View:
* ViewActions.click(): simula un click sobre la view
* ViewActions.typeText(String): simula un click en la view i hi escriu el text especificat per el l'string que li passem per paràmetre.
* ViewActions.scrollTo(): simula com l'usuari mou la visibilitat de la View, de tal manera que es pugui veure la View que estem buscant.
* ViewActions.pressKey(KeyCode): simula un click en la tecla que li passem per paràmetre en forma de keycode.
Línia 106:
 
== Un exemple pràctic ==
=== Preparació delde l'entorn ===
En aquest punt, explicarem pas a pas com crear i aplicar un exemple pràctic. Abans de tot, haurem de crear un projecte nou sobre el qual treballarem i farem les proves pertinents. Podem omplir aquest projecte amb el contingut que vulguem, Espresso es pot aplicar en qualsevol projecte seguint les normes especificades anteriorment.
 
Línia 120:
[[File:Screenshot inici 2.png|thumb|esquerra|Vista principal]]
 
La imatge que podem observar a l'esquerra, és la vista principal que ens apareixerà quan obrim la nostrenostra app de prova. En ella podem observar un toolbar amb diferents botons, però que no compleixen cap funció, dos Botons, dos TextView, que seran l'objectiu a testejar juntament amb els botons, i dues imatges, una d'elles oculta.
 
Aquesta aplicació serveix per anar mirant quin tipus de cotxe estem fent servir, si estem fent servir un que s'arrenca prement un botó o utilitzant una clau. Això ho podem aconseguir prement el botó ''Arrenca'', cada cop que el premem s'activarà un event que, de manera intercalada, ens triarà un dels dos tipus de cotxe i aplicarà uns canvis a la vista. De manera més detallada, aquest botó té una responsabilitat que consisteix en quequè quan es premi ha de canviar el text d'ambdosambdós TextView que apareixen en pantalla i, al costat de la fotografia del cotxe vermell apareixerà un altrealtra imatge, depenent del cas serà la imatge d'un botó o d'una clau.
 
En canvi, el botó ''Nou Cotxe'', té la responsabilitat de re-iniciar les variables que es mostren per pantalla. És a dir, tornar a deixar la vista com es veu en la imatge Vista principal, sense nosaltres tocar el botó.
Línia 143:
 
=== Entorn Espresso ===
Ara que ja tenim l'estructura bàsica del nostre projecte i sabem quequè fa l'aplicació de prova, afegirem cadascuna de les parts necessàries a la classe de Test que hem creat.
* Capçalera
<syntaxhighlight lang="groovy">
Línia 175:
</syntaxhighlight>
 
En aquest cas concret, no necessitem inicialitzar cap variable, per tant la funció amb etiqueta @Before el deixarem buit. El que si que modificarem serà el contingut de la funció amb etiqueta @Test, introduint les línies de codi següent. Cada bloc, correspon a la comprovació del resultat quan es premen els botons pertinents.
 
<syntaxhighlight lang="groovy">