Testing - 1Adevelopers/FlorAppMovil GitHub Wiki
Testing
| Documentos | Descripción |
|---|---|
| Plan de Pruebas | Documento marco que define la estrategia de QA, alcance, criterios de aceptación, herramientas y entornos de prueba. |
| Planilla de Test Cases | Matriz detallada de casos de prueba con pasos de ejecución, datos de entrada, resultados esperados y estados. |
| Reporte de Bugs | Registro y seguimiento de incidencias, errores visuales y fallos detectados, gestionados en el tablero Kanban. |
| Accesibilidad | Auditoría de usabilidad y estándares WCAG 2.2 AA (contraste, TalkBack, ScrollView y touch targets de 48dp). |
| Pruebas Unitarias de ViewModel y Validador | Evidencias y reporte HTML ejecutable (ZIP) de los tests locales sobre ContactoViewModel y ContactoValidador. |
| Pruebas de repositorio con MockWebServer | Pruebas unitarias sobre ContactoRepository simulando respuestas HTTP (200 OK / 500 Error) en la PC sin backend real. |
| Flujo crítico con Espresso y Screen Object | Pruebas de UI instrumentadas en emulador/dispositivo para validar navegación y formularios de forma automatizada. |
| Pruebas automatizadas con Appium | Suite de pruebas End-to-End (E2E) ejecutadas sobre la APK compilada para validar flujos de usuario completos. |
Guía de Ejecución de Pruebas - FlorApp Móvil
Este documento detalla las instrucciones necesarias para ejecutar la suite de pruebas automatizadas y consultar los reportes de calidad del proyecto FlorApp.
Requisitos Previos
- Android Studio (versión Iguana o superior recomendada).
- JDK 17 configurado en el proyecto.
- Para las pruebas de UI (Espresso), se requiere un emulador o dispositivo físico conectado con Android 8.0 (API 26) o superior.
1. Tests Unitarios y MockWebServer (Pruebas Locales)
Estos tests evalúan la lógica interna (Validadores, ViewModels) y simulan las respuestas de la API de Django usando MockWebServer sin necesidad de un emulador.
Ejecución desde Android Studio:
- En la vista de proyecto (Project View), navega a la carpeta
app/src/test/java/. - Haz clic derecho sobre el paquete raíz de las pruebas (
com.ispc.florappmovil). - Selecciona "Run 'Tests in florappmovil'".
Ejecución por Terminal (Gradle):
Abre la terminal integrada en Android Studio y ejecuta:
./gradlew testDebugUnitTest
Pruebas unitarias de ViewModel y Validador (Contacto)
Esta sección documenta las pruebas unitarias locales para la lógica de presentación (ContactoViewModel) y la validación de formularios (ContactoValidador). Verifican el comportamiento reactivo de la interfaz y las reglas de negocio en la PC sin necesidad de encender un emulador o dispositivo físico.
| Dato | Valor |
|---|---|
| Herramientas | JUnit 4 + Mockito (org.mockito:mockito-core:4.8.0) + ArchTaskExecutor |
| Lenguaje / Framework | Java + JUnit 4 |
| Tipo de prueba | Unitaria local (JVM - corre en la PC) |
| Clases probadas | com.ispc.florappmovil.ui.contacto.ContactoViewModelcom.ispc.florappmovil.util.ContactoValidador |
| Clases de test | app/src/test/java/com/ispc/florappmovil/ui/contacto/ContactoViewModelTest.javaapp/src/test/java/com/ispc/florappmovil/util/ContactoValidadorTest.java |
| Responsables | M. Florencia Lorenzati / Ignacio Bentivoglio |
| Reportes | ContactoViewModelTest / ContactoValidadorTest |
1. ¿Qué es cada cosa y para qué sirven estas pruebas?
Mockito y pruebas de ViewModel (AUT-UNIT-02)
Un ViewModel gestiona los estados de la interfaz gráfica a través de LiveData. Para probarlo de forma aislada sin depender del servidor ni de la base de datos real, se utiliza Mockito para crear un repositorio falso (@Mock).
- El mock simula respuestas instantáneas (éxito o excepción) y se comprueba que el
ViewModelexponga los mensajes correctos a la vista.
Pruebas de validación (AUT-UNIT-03)
Son pruebas de lógica pura creadas con JUnit 4. Evalúan métodos estáticos o utilitarios (ContactoValidador) aplicando clases de equivalencia y valores límite para garantizar que los datos ingresados por el usuario cumplan el formato obligatorio antes de enviar la petición a la red.
2. Capa probada: Lógica de presentación y validación
En el módulo de contacto, las pruebas unitarias cubren el flujo previo al envío de red:
| Capa | Clase de Test | Técnica / Herramienta | Qué simula / verifica |
|---|---|---|---|
| ViewModel | ContactoViewModelTest (AUT-UNIT-02) |
Mockito (@Mock) + InstantTaskExecutorRule |
Simula la respuesta del repositorio y verifica la actualización reactiva del LiveData (mensajeExito / mensajeError). |
| Validador | ContactoValidadorTest (AUT-UNIT-03) |
JUnit 4 (Lógica pura) | Verifica restricciones de formato, vacíos, longitud mínima (3 caracteres) y caracteres permitidos en el campo Nombre. |
3. Pruebas implementadas
Suite 1: ContactoViewModelTest (AUT-UNIT-02)
- Requerimiento / US:
REQ-05/US-RF-05/CA-CTO-01
| ID Automatización | Método de Test | Caso / Respuesta del Mock | Verificación y Criterio de Éxito |
|---|---|---|---|
| AUT-UNIT-02a | enviarConsultaExito_actualizaEstadoExitoso |
El mock del repositorio retorna true. |
ContactoViewModel expone en mensajeExito el texto "¡Consulta enviada con éxito!". |
| AUT-UNIT-02b | enviarConsultaError_actualizaEstadoError |
El mock del repositorio lanza una excepción (IOException). |
ContactoViewModel captura el error y expone en mensajeError el texto "Error al conectar con el servidor". |
Suite 2: ContactoValidadorTest (AUT-UNIT-03)
- Requerimiento / US:
CA-CTO-03
| ID Automatización | Método de Test | Dato de entrada evaluado | Resultado esperado | Criterio de validación |
|---|---|---|---|---|
| AUT-UNIT-03a | valorValido_retornaTrue |
"Pedro Perez" |
true |
Cumple con longitud y caracteres alfabéticos permitidos. |
| AUT-UNIT-03b | valorVacio_retornaFalse |
" " |
false |
Rechaza cadenas compuestas únicamente por espacios en blanco. |
| AUT-UNIT-03c | valorEnLimiteInferior_retornaTrue |
"Ana" |
true |
Cumple con el límite inferior exacto de 3 caracteres. |
| AUT-UNIT-03d | valorFueraDeFormato_retornaFalse |
"Pedro_#123" |
false |
Rechaza caracteres especiales y números no permitidos. |
4. Configuración en Gradle
En el archivo app/build.gradle, dentro del bloque dependencies:
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:4.8.0'
testImplementation 'androidx.arch.core:core-testing:2.1.0' // Regla para ejecutar LiveData de forma síncrona en JVM
Nota: La dependencia core-testing proporciona la regla @Rule public InstantTaskExecutorRule, imprescindible para que los observadores de LiveData respondan de manera síncrona dentro de la prueba unitaria.
5. Ejecución de las pruebas
No requiere encender el backend de Django, ni conectar celular o emulador.
Desde Android Studio
- Navegar en la vista de proyecto a
app/src/test/java/com/ispc/florappmovil/. - Hacer clic derecho sobre
ContactoViewModelTest.javaoContactoValidadorTest.java. - Seleccionar Run 'ContactoViewModelTest' (o presionar
Ctrl + Shift + F10).
Desde la terminal (PowerShell / CMD)
- Ejecutar únicamente la suite del ViewModel:
.\gradlew.bat :app:testDebugUnitTest --tests "*ContactoViewModelTest" - Ejecutar únicamente la suite del Validador:
.\gradlew.bat :app:testDebugUnitTest --tests "*ContactoValidadorTest" - Ejecutar la suite completa de pruebas unitarias locales:
.\gradlew.bat :app:cleanTestDebugUnitTest :app:testDebugUnitTest
Visualización del reporte HTML
Abrir el archivo en cualquier navegador web descomprimiendo la suite completa o navegando a la siguiente ruta:
app/build/reports/tests/testDebugUnitTest/index.html
6. Resultado de la ejecución
| Fecha | Entorno de Ejecución | Tests Ejecutados | Resultado |
|---|---|---|---|
| 12/10/2026 | Linux Lubuntu / Windows 10 — JVM 17 (Android Studio) | 6 de 6 pasaron | 100% successful (81 ms) |
==============================================================================
BUILD SUCCESSFUL in 2s
21 actionable tasks: 6 executed, 15 up-to-date
Test Results:
[PASSED] ContactoViewModelTest > enviarConsultaExito_actualizaEstadoExitoso
[PASSED] ContactoViewModelTest > enviarConsultaError_actualizaEstadoError
[PASSED] ContactoValidadorTest > valorValido_retornaTrue
[PASSED] ContactoValidadorTest > valorVacio_retornaFalse
[PASSED] ContactoValidadorTest > valorEnLimiteInferior_retornaTrue
[PASSED] ContactoValidadorTest > valorFueraDeFormato_retornaFalse
6 tests completed, 0 failed, 0 skipped.
==============================================================================
7. Problemas frecuentes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
NullPointerException al evaluar LiveData |
El hilo de LiveData no está sincronizado en la JVM. |
Agregar la regla @Rule public InstantTaskExecutorRule instantExecutorRule = new InstantTaskExecutorRule(); en la clase de test. |
Cannot resolve symbol Mockito |
Falta la dependencia mockito-core o ejecutar Sync. |
Revisar app/build.gradle y presionar Sync Now en Android Studio. |
| Test no detectado por Gradle | La clase de prueba quedó guardada en src/main o src/androidTest. |
Asegurarse de que el archivo se encuentre bajo la ruta app/src/test/java/.... |