Desarrollar pruebas de pytest que detecten errores con Copilot
Pytest puede recopilar las pruebas unittest.TestCase existentes del fixture y nuevas funciones
de pytest. Una interfaz de recopilación en verde no demuestra que se haya ejecutado una aserción de regresión.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 300; 60 minutos (estimación de facilitación) |
| Acción inicial | Reúne las pruebas existentes antes de agregar casos de encontrado, faltante y no mutación. |
| Materiales del aprendiz | Descarga 04-pytest.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde library relativa a esa raíz |
| Comprobación inicial esperada | Las pruebas unittest existentes se descubren y pasan. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] Un objeto ligero de datos aísla la búsqueda en el repositorio, no la carga de JSON.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Usa las convenciones existentes de pruebas y un intérprete seleccionado.
- Prueba
JsonLoanRepository.get_loan, no un mock de ese método. - Verifica IDs encontrados y ausentes y la ausencia de mutaciones.
- Demuestra que una prueba falla ante una aserción intencionalmente incorrecta.
Antes de empezar
Prepara 04-pytest siguiendo la guía de configuración.
Usa el
fixture de pruebas de Python proporcionado.
Selecciona un entorno en la unidad de trabajo. Instala requirements.txt en esa copia
solo si falta pytest y después ejecuta los comandos desde library.
Conceptos y casos de uso
get_loan recorre la colección loans del objeto inyectado y devuelve el préstamo
coincidente o None. Un objeto ligero con un atributo loans es suficiente para esa
prueba unitaria; la carga y el guardado reales de JsonData son pruebas de componentes separadas.
Escenario del ejercicio
Las pruebas de servicios no validan directamente la búsqueda del repositorio. Añade pruebas que distingan un préstamo existente de uno ausente sin modificar el JSON del fixture.
Tarea 1 - Inspeccionar y recopilar
python -m pytest --collect-only -q tests
python -m pytest -q tests
Registra los nombres y las cantidades reales de pruebas. Lee infrastructure/json_loan_repository.py,
application_core/entities/loan.py y las pruebas de servicios antes de añadir nada.
Tarea 2 - Definir casos y un punto de aislamiento acotado
| Caso | Aserción |
|---|---|
| ID entero coincidente | Se devuelve el préstamo real coincidente |
| ID ausente | None, no un préstamo vacío nuevo |
| Colección vacía | None |
| Consulta de solo lectura | El orden y los elementos de la colección no cambian |
ID de cadena, como "1" |
Caracteriza el comportamiento actual; no presupongas una conversión |
Ejemplo de punto de aislamiento:
from types import SimpleNamespace
from infrastructure.json_loan_repository import JsonLoanRepository
# Supply actual Loan objects constructed with the fields required by the fixture.
data = SimpleNamespace(loans=[])
repository = JsonLoanRepository(data)
assert repository.get_loan(999) is None
Esto aísla el método del repositorio, no el analizador JSON. No lo presentes como una prueba de integración del sistema de archivos.
Tarea 3 - Planificar y escribir las pruebas
Solicita:
Inspect get_loan and the Loan entity. Propose found/missing/empty/non-mutation cases.
Use the real repository and a minimal data object; do not mock get_loan itself.
Distinguish current wrong-type behavior from a new validation requirement.
- Revisa el plan y añade
tests/test_json_loan_repository.py. - Usa fixtures de pytest para evitar preparación duplicada cuando mejoren la claridad.
- Verifica campos o identidad de objetos según lo requiera el contrato actual.
- Mantén las fechas controladas y deja fuera del alcance el comportamiento de servicios no relacionado.
- No añadas controladores generales de excepciones para hacer que las pruebas pasen.
Tarea 4 - Demostrar la detección
python -m pytest -q tests/test_json_loan_repository.py
python -m pytest -q tests
- Confirma que el archivo específico contenga realmente pruebas recopiladas.
- Haz temporalmente que una aserción de ID encontrado espere
None; verifica el fallo. - Restaura la aserción y vuelve a ejecutar.
- Usa el explorador de pruebas solo después de seleccionar el mismo intérprete y raíz de importación.
- Registra las limitaciones: estas pruebas no demuestran la carga de JSON, la persistencia, la seguridad ni todo el comportamiento del servicio de préstamos.
Verifica tu trabajo
- Los casos de encontrado, ausente y vacío ejercitan el repositorio real.
- La búsqueda no modifica la colección fuente.
- La aserción incorrecta falla con una salida distinta de cero.
- El intérprete, el directorio de trabajo y los comandos son reproducibles.
- No se modificaron datos JSON reales ni otro proyecto.
Solución de problemas
ModuleNotFoundError suele indicar una raíz o un intérprete incorrectos.
0 tests collected no es éxito. Si un mock devuelve exactamente lo que configuraste,
pregunta si el método sometido a prueba llegó a ejecutarse.
Práctica independiente
Añade una prueba de componente para JSON corrupto usando un fixture temporal y caracteriza el comportamiento real del cargador. No asumas silenciosamente que un error mostrado es una excepción.
Restablecimiento
Restaura únicamente tu nuevo archivo de pruebas y la configuración local de pruebas. Cierra el espacio de trabajo desechable; mantén intactos los intérpretes compartidos.