Verificar el proyecto y ampliarlo con método

Ciencia y tecnologíaVerificar el proyecto y ampliarlo con método

Una aplicación terminada necesita algo más que una ejecución afortunada. En esta lección comprobarás que los módulos colaboran correctamente y que los errores previstos conservan los datos. Después elegirás una ampliación pequeña con reglas y pruebas. El resultado será una base de trabajo que entiendes y puedes modificar con un criterio propio.

Recuperar los requisitos iniciales

Abre la hoja del primer capítulo. Tenías un alta válida, un código repetido, una cantidad negativa, una búsqueda sin resultados y una importación incorrecta. Ahora cada requisito puede convertirse en una comprobación concreta. Si has cambiado alguna regla durante el curso anótalo y explica por qué. No declares cumplido un requisito simplemente porque ya no lo recuerdas.

El proyecto conserva información entre órdenes mediante SQLite. Su formato de intercambio utiliza tres columnas y punto y coma. Las búsquedas comparan sin distinguir mayúsculas pero mantienen las tildes. La importación incorpora el lote completo o lo rechaza. Estas características deben aparecer tanto en las instrucciones como en las pruebas que preparas.

Probar la transacción completa

Guarda test_proyecto.py junto a los cuatro módulos. La primera prueba comprobará una propiedad importante: si un lote contiene un código ya existente no debe conservar tampoco un artículo válido insertado antes de encontrar el conflicto. La segunda verificará un intercambio CSV de ida y vuelta sin utilizar archivos personales.

from pathlib import Path
from tempfile import TemporaryDirectory
import sqlite3
import unittest
from modelo import crear_articulo
from almacen import conectar, agregar_varios, consultar

class PruebasProyecto(unittest.TestCase): def setUp(self): self.conexion = conectar(":memory:") self.addCleanup(self.conexion.close)

def test_lote_duplicado_se_revierte(self): inicial = crear_articulo("CU001", "Cuaderno", 3) agregar_varios(self.conexion, [inicial]) lote = [ crear_articulo("CA001", "Carpeta", 2), crear_articulo("CU001", "Otro cuaderno", 5), ] with self.assertRaises(sqlite3.IntegrityError): agregar_varios(self.conexion, lote) self.assertEqual(consultar(self.conexion), [inicial])

def test_csv_conserva_datos(self): original = [crear_articulo("LA001", "Lápiz; azul", 0)] with TemporaryDirectory() as carpeta: ruta = Path(carpeta) / "prueba.csv" escribir_csv(ruta, original) self.assertEqual(leer_csv(ruta), original)

def test_busqueda_sin_resultados(self): agregar_varios(self.conexion, [crear_articulo("CU001", "Cuaderno", 3)]) self.assertEqual(consultar(self.conexion, "tornillo"), [])

if __name__ == "__main__": unittest.main() «`

Ejecuta python -m unittest -v desde proyecto. Cada prueba utiliza una base en memoria independiente. addCleanup registra el cierre aunque el caso falle. TemporaryDirectory crea una carpeta temporal y la elimina al salir del bloque. Estas herramientas permiten repetir la comprobación sin preparar ni borrar manualmente tus archivos de trabajo.

Lo que demuestra cada caso

La primera prueba integra modelo y almacenamiento. No se conforma con observar una excepción: consulta después y compara el estado real. Esa segunda parte demuestra la reversión. Sin ella podrías tener una prueba correcta aunque el programa hubiera dejado CA001 guardado. Una propiedad de datos debe verificarse examinando los datos después de la operación.

La segunda prueba integra escritura, lectura y validación. El nombre contiene una tilde y el separador del formato. La cantidad es cero. Son elecciones deliberadas que comprueban reglas que podrían perderse al intercambiar. La igualdad de las dataclasses permite comparar los campos sin escribir una comprobación independiente para cada uno.

La tercera diferencia un resultado vacío de una excepción. No encuentra tornillos y eso es una respuesta válida. Si la conexión estuviera cerrada debería fallar por otra razón. Cada prueba expresa una conducta concreta y no pretende demostrar todo el programa. Conserva también las pruebas de modelo que desarrollaste en el capítulo catorce.

Añadir comprobaciones de aceptación manuales

Las pruebas automáticas no sustituyen completamente a utilizar la terminal. Revisa la ayuda, las comillas en nombres con espacios y la posición de –db. Ejecuta el programa desde una carpeta distinta con rutas explícitas. Comprueba que sabes identificar la base que estás utilizando sin depender de lo que muestra el explorador por casualidad.

Realiza además el ensayo de copia con la base cerrada. Abre el respaldo y localiza un registro conocido. Documenta las versiones de Python utilizadas y cualquier diferencia observada. El curso no promete compatibilidad con todas las configuraciones posibles: has construido una aplicación con un alcance concreto y debes conservar las condiciones bajo las que la has verificado.

Preparar unas instrucciones para otra persona

Crea por tu cuenta un archivo de texto con los requisitos, los nombres de los módulos y cinco órdenes de ejemplo. Incluye cómo inicializar, añadir, buscar, exportar e importar en otra base. Explica que el entorno virtual se reconstruye y que la base contiene datos que necesitan respaldo. No distribuyas tus archivos de prueba mezclados con una supuesta versión definitiva.

Esas instrucciones son una prueba de claridad. Si otra persona necesita preguntarte qué carpeta contiene app.py o por qué un código repetido no actualiza el artículo, falta información. Puedes empezar por leértelas tú mismo al día siguiente sin consultar el historial de trabajo. Anota cada supuesto que habías dado por evidente.

Elegir una ampliación que puedas verificar

Una buena siguiente mejora sería actualizar la cantidad de un código exacto. Antes de programarla decide qué ocurre si no existe, si la cantidad es negativa o si coincide con la actual. Añade un comando específico y utiliza parámetros en SQL. Escribe primero una prueba de cada caso y conserva la versión anterior hasta verificar el cambio.

Otra opción es incorporar un informe de artículos agotados. Esa ampliación aprovecha las consultas sin modificar datos. No intentes añadir a la vez interfaz gráfica, usuarios y sincronización. Cada nueva responsabilidad exige decisiones propias. Profundizar en una mejora pequeña te permitirá reconocer qué parte del sistema cambia y qué comportamientos deben permanecer iguales.

Errores habituales

Cambiar el código y las expectativas de las pruebas al mismo tiempo puede esconder una regresión. Revisa el requisito antes de modificar lo esperado. Tampoco des por terminada una mejora porque aparece un mensaje de éxito: consulta el estado guardado y vuelve a abrir la aplicación para comprobar la persistencia.

Copiar una solución que no puedes explicar limita tu capacidad para mantenerla. Cuando incorpores ayuda externa reduce el ejemplo, ejecuta sus pruebas y revisa sus efectos sobre archivos. Tu siguiente objetivo debe ser comprender una pieza nueva cada vez. El proyecto actual ofrece una referencia suficientemente pequeña para observar esas diferencias con detalle.

Lo que deberías recordar

  • Comprueba el estado después de un error.
  • Las pruebas de integración unen varias piezas.
  • Documenta cómo ejecutar y recuperar la aplicación.
  • Amplía una responsabilidad cada vez.

Ejercicio práctico

Ejecuta las tres pruebas de integración y añade una cuarta que rechace un CSV con códigos repetidos después de normalizar. Añade también una prueba que intente exportar a un destino existente y confirme que conserva su contenido anterior. Usa una carpeta temporal en ambas.

Completa los cinco requisitos de aceptación de la primera hoja y registra sus resultados. Ensaya la recuperación de una copia sin borrar la base original. Prepara las instrucciones mínimas para ejecutar el proyecto desde una carpeta nueva con el intérprete del entorno.

Elige una sola mejora y escribe tres criterios de aceptación antes de tocar el código. Guarda una copia de la versión actual, realiza el cambio y repite las pruebas. Si una comprobación falla averigua si has cambiado una regla deliberadamente o si has introducido un defecto. Conserva en el cuaderno la decisión y la evidencia que la justifica.

Vuelve a las lecciones que necesites y aplica una mejora pequeña al proyecto después de comprobar su comportamiento.

Volver al índice de Programar con Python.

Últimos posts

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

 

Artículos más vistos

Horóscopo diario
Menú diario