No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Parametrización de pruebas con SubTest en UnitTest

14/20
Recursos

El uso de SubTest en UnitTest te permite optimizar tus pruebas evitando la duplicación de código. Imagina que necesitas probar un método con varios valores diferentes. Sin SubTest, tendrías que crear varias pruebas casi idénticas, lo que resulta ineficiente. SubTest permite parametrizar pruebas, lo que significa que puedes ejecutar la misma prueba con diferentes valores sin repetir el código.

¿Cómo evitar la duplicación de pruebas con SubTest?

Al utilizar SubTest, puedes definir todos los valores que deseas probar en una lista o diccionario. Luego, iteras sobre estos valores mediante un bucle for, ejecutando la misma prueba con cada conjunto de parámetros. Así, si es necesario modificar la prueba, solo tienes que hacer cambios en un único lugar.

¿Cómo implementar SubTest en un caso práctico?

Para ilustrarlo, se puede crear una prueba llamada test_deposit_various_values. En lugar de duplicar la prueba con diferentes valores de depósito, utilizas un diccionario que contiene los valores a probar y el resultado esperado. Después, recorres estos valores con SubTest usando la estructura with self.subTest(case=case) y ejecutas la prueba para cada valor del diccionario. Esto asegura que cada prueba sea independiente y evita sumar valores a la cuenta de manera incorrecta.

¿Cómo gestionar errores con SubTest?

SubTest también es útil para identificar errores específicos. Si una prueba falla con un conjunto particular de parámetros, SubTest te permite ver fácilmente qué valores causaron el fallo. Esto facilita mucho la corrección de errores, ya que puedes aislar rápidamente los casos problemáticos y corregirlos de manera eficiente.

Aportes 3

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En Python, el uso de `subTest` dentro del módulo `unittest` permite parametrizar pruebas, facilitando la ejecución de múltiples casos de prueba dentro de una sola función de prueba. Esto es útil cuando quieres probar una función con diferentes entradas y verificar sus resultados sin necesidad de crear múltiples métodos de prueba. Aquí tienes una guía sobre cómo usar `subTest` para parametrizar pruebas. \### 1. Importar el Módulo Necesario Primero, asegúrate de importar `unittest`. ```python import unittest ``` \### 2. Definir tu Clase de Pruebas Crea una clase de prueba que herede de `unittest.TestCase`. ```python class TestMiFuncion(unittest.TestCase): def mi\_funcion(self, x): \# Esta es la función que estás probando return x \* 2 ``` \### 3. Usar `subTest` para Parametrizar las Pruebas Dentro de tu método de prueba, utiliza un bucle para iterar sobre los casos de prueba. Usa `subTest` para encapsular cada caso. ```python class TestMiFuncion(unittest.TestCase): def mi\_funcion(self, x): return x \* 2 def test\_multiplicacion(self): casos\_de\_prueba = \[ (1, 2), (2, 4), (3, 6), (4, 8), (5, 10) ] for entrada, resultado\_esperado in casos\_de\_prueba: with self.subTest(entrada=entrada): resultado = self.mi\_funcion(entrada) self.assertEqual(resultado, resultado\_esperado) ``` \### 4. Ejecutar las Pruebas Finalmente, ejecuta las pruebas utilizando la línea de comando. ```bash python -m unittest nombre\_del\_archivo.py ``` \### Ejemplo Completo Aquí tienes un ejemplo completo que incluye todas las partes mencionadas: ```python import unittest class TestMiFuncion(unittest.TestCase): def mi\_funcion(self, x): return x \* 2 def test\_multiplicacion(self): casos\_de\_prueba = \[ (1, 2), (2, 4), (3, 6), (4, 8), (5, 10) ] for entrada, resultado\_esperado in casos\_de\_prueba: with self.subTest(entrada=entrada): resultado = self.mi\_funcion(entrada) self.assertEqual(resultado, resultado\_esperado) if \_\_name\_\_ == '\_\_main\_\_': unittest.main() ``` \### Ventajas de Usar `subTest` \- \*\*Claridad\*\*: Cada caso de prueba se ejecuta de manera aislada, lo que facilita identificar cuál falló. \- \*\*Mantenimiento\*\*: Evita la duplicación de código, lo que hace que sea más fácil mantener y actualizar las pruebas. \- \*\*Resultados Detallados\*\*: `subTest` proporciona un informe claro sobre qué subprueba falló, lo que facilita la depuración. Usar `subTest` es una excelente manera de mantener tus pruebas organizadas y eficientes, especialmente cuando trabajas con múltiples casos de entrada y salida.
![](https://static.platzi.com/media/user_upload/pub-9a4fc35a-1c91-497f-970f-c4d80dcef7e2.jpg)
```python # test con multiples valores. @pytest.mark.parametrize("deposit_amount, expected_balance", [ (1000, 2000), (3000, 4000), (5000, 6000), ]) def test_deposit_multiple_values(setup_account, deposit_amount, expected_balance): """ Prueba el método deposit con múltiples valores usando parametrización. """ new_balance = setup_account.deposit(deposit_amount) assert new_balance == expected_balance ```