Skip to content

Testing

fortizva edited this page Dec 23, 2023 · 12 revisions

Proceso

Para la gestión de la implementación de los test ha sido necesaria la creación de una nueva tarea en Jira, en la cual se han añadido una sub-tarea por cada uno de los casos de uso que hay en la aplicación.

Creación y estimación de tareas

Esta tarea ha sido llamada "Testing" y ha quedado configurada como muestra la imagen siguiente.

TareaTesting

Cada test se ha estimado en unas 2 horas. Esta estimación es fruto de tener en cuenta el tiempo para formarse en Espresso o JUnit, la gestión de las ramas pertinentes y la propia grabación y/o creación de los test.

Para los test unitarios no ha sido necesaria la creación de ninguna subtarea, ya que se hicieron en el pasado en una tarea propia de testing relacionada con la tarea de la implementación de la búsqueda de sets.

Método de asignación de tareas

Tras una reunión del equipo, se ha decidido repartir los test de manera igualitaria, ya que todos hemos participado en la implementación de todos o casi todos los casos de uso y, tras el reajuste de tiempos del proyecto, si cada persona se hacia responsable del contenido de su Sprint, quedaba una carga de trabajo desigual.

Pruebas Unitarias. JUnit

Para las pruebas unitarias, se ha elegido el framework de testing JUnit, ya que viene integrada por defecto en el IDE Android Studio, cosa que asegura su total integración en el mismo junto con la sencillez de no hacer necesario ningún proceso de instalación de librerias externas y/o herramientas.

Partes a cubrir

Se deberá comprobar, como mínimo, que todas las clases con acceso a datos son cubiertas por estos tests, lo cual involucra:

  • com.gd05.brickr.api.RebrickableService

  • com.gd05.brickr.database.BrickrDatabase

Debido a que la parte de los tests a la base de datos son opcionales por el patrón Room, solo se han hecho los test pertinentes en RebrickableService.

RebrickableService

Para la prueba de la API, se ha creado un test sobre el servicio que envuelve a la misma. Estos tests comprueban el mapeo de datos entre el cliente (Nosotros) y la API (Rebrickable) al mismo tiempo que la key de seguridad proveída por el servidor.

Para evitar la sobrecarga a la API, se ha añadido una espera de 1 segundo y 1 milisegundo entre tests de cara a no sobrecargar la API.

@Before
fun beforeTest() {
    service = RebrickableService
    Thread.sleep(1001)
}

Los test están hechos de tal manera que se comprueba que cada petición acepta una serie de parámetros, se mapean correctamente y la consulta acaba siendo correcta, lo que comprobaria que las clases de entrada y salida de la API junto con los end-points atacados son correctos.

@Test
fun test_colors() {
    var response = service.getColors(ColorsRequest())
        .execute()
    if (response.isSuccessful) {
        assert(response.body() != null)
    } else
        assert(false)
}

Resultados

Finalmente, podremos ver la ejecución correcta del test a pesar de su larga duración debido a la espera entre acciones del mismo.

Imagen

Pruebas funcionales. Espresso

Como parte de los test funcionales, se ha decidido por la utilización de Espresso debido a que es el framework de testing enseñado en la asignatura de Arquitecturas Software en Entornos Empresariales.

Partes a cubrir

Se ha de crear un test por cada Historia de Usuario, demostrando que se cubren todos los requerimientos pedidos por el cliente al inicio del proyecto. Para cada historia se harán uno o varios test que demuestren que esa funcionalidad existe y funciona en la aplicación.

Las historias de usuario a cubrir son las siguientes:

  1. GD05-10: Buscar pieza

  2. GD05-11: Guardar pieza en "Mi Inventario"

  3. GD05-12: Cambiar tamaño de letra

  4. GD05-13: Activar modo oscuro

  5. GD05-14: Consultar Inventario

  6. GD05-15: Modificar cantidad piezas de "Mi Inventario"

  7. GD05-16: Eliminar pieza de "Mi Inventario"

  8. GD05-18: Buscar Set

  9. GD05-19: Compartir Set

  10. GD05-21: Filtrar piezas de Mi Inventario

  11. GD05-22: Guardar piezas de Set en Mi Inventario

  12. GD05-23: Eliminar piezas de Set en Mi Inventario

  13. GD05-24: Ver Favoritos

  14. GD05-25: Guardar Favoritos

  15. GD05-26: Eliminar Favoritos

  16. GD05-27: Verificar piezas

  17. GD05-28: Consultar piezas Set

Resultados

TODO: Añadir capturas de pantalla con los test pasados

2. GD05-11: Guardar Pieza en Mi Inventario

Descripción: El test Espresso diseñado para la historia de usuario de guardar pieza en mi inventario accede a la vista detalle de una pieza, modifica la cantidad de esta pasando de 0 a 1 y navega a la sección Mi Inventario comprobando que existe el elemento.

Autor: Sr. Marrón

Resultado: Fallido

Imagen

Problemas encontrados: El test falla debido a una excepción NoMatchingViewException, es decir, no está encontrando el elemento esperado en la vista, estos puede ocurrir debido a un mal diseño de las jerarquías de la app.

4. GD05-13: Activar modo oscuro

Descripción: El test Espresso diseñado para la historia de usuario de cambio al modo oscuro simplemente accede al menú desplegable de la barra superior en la página principal, desde donde accede a la sección de 'Ajustes' para finalmente activar la configuración de modo oscuro. Una vez activado el modo oscuro, se realiza una comprobación para determinar que el modo de la IU es UI_MODE_NIGHT_YES.

Autor: Sr. Naranja

Resultado: Exitoso

Imagen

Problemas encontrados: Ninguno.

6. GD05-15: Modificar cantidad piezas en Mi Inventario

Descripción: El test Espresso diseñado para la historia de usuario de modificar cantidad de piezas en mi inventario accede al inventario donde encontramos una pieza previamente cargada, modifica la cantidad sumando uno, comprueba que el resultado es 2 y disminuimos la cantidad en 1 comprobando que el resultado es 1.

Autor: Sr. Marrón

Resultado: Exitoso

Imagen

Problemas encontrados: Ninguno.

11. GD05-22: Guardar piezas de set en Mi Inventario

Descripción: El test Espresso diseñado para la historia de usuario de guardar piezas de set en mi inventario accede a la sección de bricks de un set, pulsa el botón guardar piezas y navega a la sección inventario para comprobar si existe el/los elementos.

Autor: Sr. Marrón

Resultado: Fallido

Imagen

Problemas encontrados: El test falla debido a una excepción NoMatchingViewException, es decir, no está encontrando el elemento esperado en la vista, estos puede ocurrir debido a un mal diseño de las jerarquías de la app.

13. GD05-24: Ver Favoritos

Descripción: El test Espresso diseñado para la historia de usuario de Ver favoritos consiste en navegar a la sección favoritos y comprobar que existe el elemento set que hemos cargado previamente.

Autor: Sr. Marrón

Resultado: Exitoso

Imagen

Problemas encontrados: Ninguno.

17. GD05-28: Consultar piezas Set

Descripción: El test Espresso diseñado para la historia de usuario de Consultar piezas Set se basa en la navegación a la sección de bricks de un set y comprobar que existe una pieza concreta y que su cantidad es la esperada.

Autor: Sr. Naranja

Resultado: Exitoso

Imagen

Problemas encontrados: Este test ha sido especialmente problemático debido a la falta de sincronización entre la API y Espresso, a lo que se le ha añadido múltiples esperas a lo largo del test para asegurar que la API ha cargado los datos.

Además de esto, cabe resaltar que el asistente de grabación de Espresso no ha sido capaz de grabar correctamente la acción de pulsar elementos de las listas de los RecyclerView involucrados, por lo que se han tenido que añadir manualmente.