Testing Android Applications

Introducción


Como es bien conocido dentro del proceso de desarrollo de una solución móvil es necesario realizar los respectivos guiones de pruebas y pruebas unitarias al software para garantizar la entrega de un producto con un nivel de calidad aceptable y garantizar el mínimo de errores posibles en nuestro servicio.

A diferencia del software convencional las pruebas de una solución móvil no se enfocan netamente al testeo técnico de los componentes (Wifi disponible, GPS activo, Conexión http disponible), hay que considerar con la misma importancia al testeo funcional de los componentes (Interacción con las pantallas, Navegación entre Activities, Contenidos de la vista disponible). Por ello cuando hablamos de testear una App hablamos de dos niveles de pruebas:

- Functional testing
- Technical testing

Para ello contamos con diferentes frameworks en el mercado que podemos integrar al entorno de desarrollo. Esto quiere decir que usualmente no se utiliza una sóla herramienta para testear el App si no que es necesario usar múltiples herramientas dependiendo del nivel de testing que se requiera ejecutar.

Nota: Creo que la razón por la que no hay una única herramienta de testing de App Android ha sido básicamente a que se han desarrollado como proyectos de testing independientes. Actualmente Google ha hecho el esfuerzo de integrar algunas en Android Studio. Tal es el caso de Espresso y JUnit.

Functional testing
Estas pruebas unitarias estresan el App a nivel de funcionalidad y valida los componentes visuales de la aplicación, operaciones como

- Visibilidad de botones, textos, imágenes, checkbox, frames, etc.
- Eventos de clics sobre textos, imágenes, checkbox, etc.
- Valores por defecto de listas de selección
- Número mínimo o máximo de listas de selección.
- Atributos de componentes visuales tales como ancho y altura.

Para realizar estas pruebas podemos usar EspressoRobolectricRobotium, o Calabash.
En el artículo Espresso in Android Studio se detalla como trabajar Espresso con Android Studio.

Technical testing
Estas pruebas unitarias son enfocadas en probar los operaciones técnicas y de negocio que debe realizar el App, entre las más comunes son:

- Acesso a la red (http conection).
- GPS activo
- Wifi encendido
- Acceso a contactos
- Permisos de escritura sobre la memoria externa (SDCard)
- Finalización de procesos asyncronos, etc.

Para realizar estos test podemos usar Junit o Hamcrest.
En el artículo JUnit in Android Studio se detalla como trabajar JUnit con Android Studio.

Conclusión
Depende de la complejidad del proyecto y del software los niveles de testing que definirás. El promedio de aplicaciones sólo requeriran pruebas con JUnit/Espresso pero finalmente el factor que decide que framework usar será los guiones de pruebas que necesite abarcar el testing. Sin embargo mi recomendación es seguir las pautas marcadas por Google y siempre incluir al menos las pruebas unitarias dentro del proceso de desarrollo como una buena práctica.
Thanks for your comment