Slide 1

Slide 1 text

UI testing en Android Espresso Workshop @_saulmm

Slide 2

Slide 2 text

UI testing en Android 
 
 ¿Qué es espresso? ¿Por son necesarios los test de UI? Espresso Test Recorder Espresso API Espresso Idling Resources Mock web server Firebase test lab
 Casos avanzados @_saulmm

Slide 3

Slide 3 text

UI testing en Android @_saulmm https://github.com/ADGevents/vigotech-sample

Slide 4

Slide 4 text

@_saulmm

Slide 5

Slide 5 text

Qué es Espresso? @_saulmm

Slide 6

Slide 6 text

Qué es Espresso? Framework UI Testing Mantenido y soportado por Google ‘Relativamente’ sencillo implementar tests de UI Los test de UI imitan a un usuario interactuando con el dispositivo @_saulmm

Slide 7

Slide 7 text

Por qué son necesarios los tests de UI El ‘testing’ manual es tedioso Implica mucho tiempo, es fácil perder tests importantes Permite la refactorización Evita regresiones Tests con gran ‘scope’ Al interactuar cuál usuario, los detalles de implementación no son demasiado importantes @_saulmm

Slide 8

Slide 8 text

@_saulmm

Slide 9

Slide 9 text

Espresso test recorder Buena primera aproximación Espresso Test Recorder permite generar tests de 
 UI a partir de interacciones con un dispositivo Código autogenerado mejorable Es necesario mejorar el código generado por ETR, ya que incita a malas prácticas como el uso `Thread.sleep` en nuestros tests @_saulmm

Slide 10

Slide 10 text

Espresso API onView(ViewMatcher) .perform(ViewAction) .check(ViewAssertion); @_saulmm

Slide 11

Slide 11 text

@_saulmm

Slide 12

Slide 12 text

@_saulmm

Slide 13

Slide 13 text

@_saulmm

Slide 14

Slide 14 text

@_saulmm

Slide 15

Slide 15 text

Espresso basic test Demo! @_saulmm $git checkout simple-test

Slide 16

Slide 16 text

Mock web server # @_saulmm Scriptable Web Server para testear clientes HTTP Mantenido por Square (creadores de OkHttp, Retrofit) Permite servir archivos JSON estáticos en local Se evita salir a internet, razón suficiente para que nuestros tests
 no sean confiables (flaky tests)

Slide 17

Slide 17 text

Mock web server # @_saulmm Scriptable Web Server para testear clientes HTTP Mantenido por Square (creadores de OkHttp, Retrofit) Permite servir archivos JSON estáticos en local Se evita salir a internet, razón suficiente para que nuestros tests
 no sean confiables (flaky tests)

Slide 18

Slide 18 text

Mock web server # @_saulmm Demo! $git checkout mock-web-server

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

@_saulmm

Slide 21

Slide 21 text

@_saulmm

Slide 22

Slide 22 text

@_saulmm

Slide 23

Slide 23 text

Espresso idling resources ⏱ @_saulmm Espresso necesita saber que operaciones asíncronas ocurren LLamadas a red, operaciones complejas, carga de db, etc. Mediante el componente IdlingResource, podemos decirle a Espresso cuando ha de esperar CountlingIdlingResource.increment()
 doHeavyWork()
 CountingIdlingResource.decrement()

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Espresso idling resources ⏱ Demo! @_saulmm $git checkout idling-resource

Slide 26

Slide 26 text

The robot pattern Permite reutilizar código fácilmente Múltiples tests con múltiples parámetros Abstrae los detalles de implementación Facilidad en el mantenimiento de los test @_saulmm

Slide 27

Slide 27 text

The robot pattern @_saulmm

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Demo! The robot pattern @_saulmm $git checkout test-robots

Slide 32

Slide 32 text

Firebase test lab & @_saulmm Permite ejecutar tus tests en emuladores o dispositivos reales Multitud de modelos, configuraciones y locales Ejecutables desde Android Studio, Firebase o CLI

Slide 33

Slide 33 text

Firebase test lab & Demo! @_saulmm

Slide 34

Slide 34 text

Otros ejemplos ☕ Demo! @_saulmm

Slide 35

Slide 35 text

Graciñas! @_saulmm