Android: Testing — Pruebas Unitarias (Unit Testing) — Parte #1

Pablo Reyes
3 min readJul 26, 2021

Aunque a un gran porcentaje de los desarrolladores cuando les mencionan la palabra “Tests” se ponen nerviosos o piensan en ver como evitan esto, la buenas practicas nos han enseñado que realizar testing en cualquier Software es una parte muy importante ya que con esto tenemos como probar que la aplicación va a responder según lo que esperamos (es predecible) y nos permite encontrar bugs antes de que esta aplicación salga a producción.

Sin embargo hacer “testing” siempre se toma a la ligera, al punto que los equipos de desarrollo lo dejan como ultimo paso, esperan a que la aplicación sea lanzada a producción y los managers no le dan la importancia que se debe. Y entre más crece y se va volviendo compleja la aplicación los bugs y la mala arquitectura traerán muchos problemas al desarrollo y al presupuesto del proyecto.

En el mundo de Android podemos dividir el testing de la siguiente forma: Small, Medium y Large.

Small Tests

Los “small tests” son pruebas unitarias (Unit Tests) que se ejecutan sin necesidad de utilizar un emulador o un dispositivo físico. Los “small tests” se enfocan normalmente en componentes específicos y sus dependencias son probadas aparte o se crean “mocks” para emitir ciertos comportamientos.

Estas pruebas se ejecutan rápido ya que no necesitan de un emulador o dispositivo, sin embargo sirven solo para realizar testing solo de ciertas porciones de la aplicación. Por ejemplo estos tests están orientados a probar cosas como: Que se haga bien el parsing de una fecha, que la función devuelva un objeto con ciertos valores cuándo recibe cierto parámetro, que haga bien el calculo de una operación (como una suma), etc. Por lo mismo estas pruebas prueban clases/funciones con código puramente en el lenguaje que se esta trabajando, para este caso Java/Kotlin, no requieren ningún código relacionado con Android. Las herramientas utilizadas comúnmente para hacer estas pruebas en Android son: JUnit y Mockito.

Es importante notar que estas pruebas no dependen del Android Framework por lo cual si el código por ejemplo esta en Java solo necesitamos el ambiente de Java para poder ejecutar estos “small tests”, no necesitamos nada de Android.

Medium Tests

Los “medium tests” son tests de integración (Integration Tests), estos permiten probar como interactúa nuestro código con las partes del Android Framework. Estos tests se realizan normalmente después de haber terminado los “small tests”. Estos tests si requieren un emulador o dispositivo físico ya que se enfocan en probar cosas con el Android Framework, sin embargo una de las herramientas mas comunes para hacer estos tests es Roboelectric, donde Roboelectric se ejecuta adentro de un sandbox y no necesita ningún emulador o dispositivo para hacer estas pruebas.

También se pueden hacer estas pruebas con herramientas externas como Firebase Test Lab donde se realizan pruebas en distintos dispositivos con diferentes tamaños y configuraciones de hardware, esto puede mostrarnos bugs en configuraciones especificas. Existen otros Device Farm Services que se pueden usar.

Large Tests

Los “large tests” son Integration Tests + UI Tests. Estos simulan el comportamiento del usuario y buscan resultados esperados para estos comportamientos o inputs del usuario. Un caso de ejemplo seria: el test verificaría que cuando el usuario presione un botón se muestre un modal.

Las herramientas más comunes para hacer “large tests” son: Espresso y UI Automator.

Sobre los 3 tipos descritos anteriormente google recomienda seguir la siguiente regla para realizar estos tests:

  • Hacer 70 % de “Small Tests”
  • Hacer 20 % de “Medium Tests”
  • Hacer 10 % de “Large Tests”

Testing Pyramid: https://developer.android.com/training/testing/fundamentals

Hacer testing puede parecer aburrido, tedioso, o no importante pero en proyectos grandes nos evitara muchos problemas, permitirá que podamos crear aplicaciones mas solidas y evitar atrasos innecesarios en el proyecto.

--

--