Saltar al contenido principal

Escribir Pruebas Unitarias

CodeGPT puede ayudarte a escribir pruebas unitarias para tu código Python para asegurar que su funcionalidad sea confiable y libre de errores.

Al desarrollar aplicaciones en Python, es crucial probar los componentes individuales de tu código. CodeGPT puede asistir generando pruebas unitarias, sugiriendo casos límite y asegurando que tus funciones se comporten como se espera bajo diversas condiciones.

Escenario de Ejemplo​

Supongamos que tienes una función en Python que calcula el costo total de los artículos en un carrito de compras, como se muestra a continuación:

def calculate_item_cost(item):
"""Calcular el costo de un solo artículo, considerando descuentos."""
discount = item.get('discount', 0)
return item['price'] * item['quantity'] * (1 - discount)

def calculate_total(cart):
"""Calcular el costo total de todos los artículos en el carrito."""
return sum(calculate_item_cost(item) for item in cart)

Quieres probar este código usando el módulo unittest.


Ejemplo de Solicitud​

¿Cómo puedo escribir pruebas unitarias para verificar la corrección de estas funciones?


Ejemplo de Respuesta​

CodeGPT Chat podría generar el siguiente conjunto de pruebas:

import unittest

class TestShoppingCart(unittest.TestCase):

def test_calculate_item_cost_no_discount(self):
"""Probar el cálculo del costo del artículo sin descuento."""
item = {'price': 10, 'quantity': 2}
self.assertEqual(calculate_item_cost(item), 20)

def test_calculate_item_cost_with_discount(self):
"""Probar el cálculo del costo del artículo con descuento."""
item = {'price': 50, 'quantity': 1, 'discount': 0.2}
self.assertEqual(calculate_item_cost(item), 40)

def test_calculate_total_no_items(self):
"""Probar el cálculo total para un carrito vacío."""
cart = []
self.assertEqual(calculate_total(cart), 0)

def test_calculate_total_multiple_items(self):
"""Probar el cálculo total para un carrito con múltiples artículos."""
cart = [
{'price': 10, 'quantity': 2, 'discount': 0.1},
{'price': 20, 'quantity': 1, 'discount': 0},
]
self.assertEqual(calculate_total(cart), 38) # 18 + 20

def test_calculate_item_cost_invalid_item(self):
"""Probar el comportamiento cuando el diccionario del artículo está incompleto."""
item = {'price': 10} # Falta 'quantity'
with self.assertRaises(KeyError):
calculate_item_cost(item)

if __name__ == '__main__':
unittest.main()

Explicación de las Pruebas​

  1. Funcionalidad Básica: Las dos primeras pruebas aseguran que calculate_item_cost maneje correctamente los artículos con y sin descuentos.
  2. Entrada Vacía: La tercera prueba confirma que calculate_total maneja correctamente un carrito de compras vacío.
  3. Múltiples Artículos: La cuarta prueba verifica el cálculo del costo total para múltiples artículos en el carrito.
  4. Manejo de Errores: La quinta prueba verifica cómo se comporta calculate_item_cost cuando faltan claves esenciales en la entrada.