-
Notifications
You must be signed in to change notification settings - Fork 0
Testing
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.
Esta tarea ha sido llamada "Testing" y ha quedado configurada como muestra la imagen siguiente.
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.
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.
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.
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.
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)
}
Finalmente, podremos ver la ejecución correcta del test a pesar de su larga duración debido a la espera entre acciones del mismo.
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.
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:
-
GD05-10: Buscar pieza
-
GD05-11: Guardar pieza en "Mi Inventario"
-
GD05-12: Cambiar tamaño de letra
-
GD05-13: Activar modo oscuro
-
GD05-14: Consultar Inventario
-
GD05-15: Modificar cantidad piezas de "Mi Inventario"
-
GD05-16: Eliminar pieza de "Mi Inventario"
-
GD05-18: Buscar Set
-
GD05-19: Compartir Set
-
GD05-21: Filtrar piezas de Mi Inventario
-
GD05-22: Guardar piezas de Set en Mi Inventario
-
GD05-23: Eliminar piezas de Set en Mi Inventario
-
GD05-24: Ver Favoritos
-
GD05-25: Guardar Favoritos
-
GD05-26: Eliminar Favoritos
-
GD05-27: Verificar piezas
-
GD05-28: Consultar piezas Set
TODO: Añadir capturas de pantalla con los test pasados
1. GD05-13: Activar modo oscuro
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
.
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
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.
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
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
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