Repository navigation
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. |
Este documento detalla las instrucciones necesarias para ejecutar la suite de pruebas automatizadas y consultar los reportes de calidad del proyecto FlorApp.
- 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.
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.
- 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'".
Abre la terminal integrada en Android Studio y ejecuta:
./gradlew testDebugUnitTestEsta 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
|
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.
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.
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. |
-
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". |
-
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. |
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 JVMNota: 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.
No requiere encender el backend de Django, ni conectar celular o emulador.
- 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).
-
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
Abrir el archivo en cualquier navegador web descomprimiendo la suite completa o navegando a la siguiente ruta:
app/build/reports/tests/testDebugUnitTest/index.html
| 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.
==============================================================================
| 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/.... |