Awesome CopilotAdventures

Documentación del producto verificada

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

Unos pocos bloques de muestra entran en un módulo de función mientras instrumentos separados comparan sus salidas.

Ilustración conceptual original (SVG)

Distingue la recopilación de pruebas de las aserciones útiles.

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.
  1. Revisa el plan y añade tests/test_json_loan_repository.py.
  2. Usa fixtures de pytest para evitar preparación duplicada cuando mejoren la claridad.
  3. Verifica campos o identidad de objetos según lo requiera el contrato actual.
  4. Mantén las fechas controladas y deja fuera del alcance el comportamiento de servicios no relacionado.
  5. 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
  1. Confirma que el archivo específico contenga realmente pruebas recopiladas.
  2. Haz temporalmente que una aserción de ID encontrado espere None; verifica el fallo.
  3. Restaura la aserción y vuelve a ejecutar.
  4. Usa el explorador de pruebas solo después de seleccionar el mismo intérprete y raíz de importación.
  5. 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.

Referencias oficiales

Buscar

Búsqueda en español. Las rutas y los ejemplos ejecutables conservan el texto original.