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.
12345678910111213141516171819202122232425import 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.
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.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla