Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Simulación y Aislamiento de Pruebas | Pruebas con Unittest y Pytest
Programación Estructural en Python

Simulación y Aislamiento de Pruebas

Desliza para mostrar el menú

El uso de mocks es una técnica poderosa en las pruebas unitarias que permite reemplazar partes de tu sistema bajo prueba por objetos mock o funciones simuladas. El objetivo es aislar la unidad de código que estás probando de sus dependencias, como bases de datos, APIs u otros sistemas complejos. Al utilizar mocks, puedes controlar el comportamiento de las dependencias y centrarte en probar la lógica de tu código en un entorno controlado.

El aislamiento de pruebas es importante porque garantiza que las pruebas no interfieran entre sí y no se vean afectadas por factores externos a su alcance. Las pruebas aisladas son más confiables y fáciles de depurar porque sus resultados dependen únicamente del código bajo prueba y de las condiciones específicas que configures, y no del estado o comportamiento de sistemas externos.

En Python, el módulo unittest.mock proporciona herramientas para simular objetos y funciones. Cuando utilizas mocks, puedes reemplazar una función u objeto real por un mock que devuelve valores controlados o registra cómo fue utilizado. Esto es especialmente útil cuando tu código interactúa con recursos que son lentos, impredecibles o no están disponibles durante las pruebas.

12345678910111213141516171819202122232425
import unittest from unittest.mock import patch def check_the_sky(): # Simulate a slow or unreliable API raise ConnectionError("API not available") def get_advice(): if check_the_sky(): return "Take an umbrella." else: return "Enjoy the sunshine!" class TestWeather(unittest.TestCase): @patch('__main__.check_the_sky') def test_advice_when_rainy(self, mock_check): mock_check.return_value = True self.assertEqual(get_advice(), "Take an umbrella.") @patch('__main__.check_the_sky') def test_advice_when_clear(self, mock_check): mock_check.return_value = False self.assertEqual(get_advice(), "Enjoy the sunshine!") unittest.main(argv=[''], exit=False)

En este ejemplo de código, la función check_the_sky simula una dependencia externa que es poco confiable o está fuera de servicio, como una API de clima que puede no estar siempre disponible. La función get_advice contiene la lógica que deseas probar: llama a check_the_sky y devuelve un consejo según el resultado.

La clase de prueba de unittest utiliza mocks para reemplazar la función real check_the_sky por un mock que devuelve valores controlados. Esto te permite probar cómo se comporta get_advice en diferentes escenarios, como cuando el cielo está despejado o lluvioso, sin depender del sistema externo real.

El decorador @patch se utiliza para reemplazar temporalmente la función real check_the_sky por un objeto mock durante cada método de prueba. El objeto mock se pasa al método de prueba como el parámetro mock_check. Utilizas mock_check para establecer el valor de retorno que deseas para esa prueba, de modo que puedes controlar cómo se comporta tu código y qué devuelve en cada escenario.

Note
Nota

La función unittest.main() en esta lección incluye un par de parámetros adicionales requeridos solo para este entorno de aprendizaje. Ayudan a que el código se ejecute correctamente en la plataforma y no forman parte de los conceptos principales de Python que necesitas aprender en este momento.

Mediante el uso de mocking, se aíslan las pruebas de sistemas externos que pueden ser lentos o poco confiables. Esto hace que las pruebas sean rápidas, repetibles y deterministas, ya que se controla exactamente lo que devuelve la dependencia en cada caso de prueba.

question mark

¿Cuándo se debe utilizar mocking en las pruebas unitarias?

Selecciona todas las respuestas correctas

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 5. Capítulo 4
some-alt