Capítulo 11: Pruebas en Python
11.5 Ejercicios Prácticos
Ejercicio 1: Pruebas Unitarias
Escribe una función simple en Python que calcule el factorial de un número. Luego, escribe un conjunto de pruebas unitarias utilizando el módulo unittest
para probar esta función. Asegúrate de que tus pruebas cubran una variedad de entradas diferentes, incluyendo entradas válidas e inválidas.
import unittest
# The function to be tested
def factorial(n):
if n < 0:
raise ValueError("Factorial is not defined for negative numbers")
if n == 0:
return 1
return n * factorial(n - 1)
# Unit tests
class TestFactorial(unittest.TestCase):
def test_positive_number(self):
self.assertEqual(factorial(5), 120)
def test_zero(self):
self.assertEqual(factorial(0), 1)
def test_negative_number(self):
with self.assertRaises(ValueError):
factorial(-1)
if __name__ == "__main__":
unittest.main()
Ejercicio 2: Mocking y Patching
Supongamos que tienes una función que interactúa con un sistema externo, como hacer una solicitud HTTP a un servicio web. Utilizando el módulo unittest.mock
, escribe una prueba unitaria para esta función que simule la interacción externa.
import unittest
from unittest.mock import patch
import requests
# The function to be tested
def get_website_status(url):
response = requests.get(url)
return response.status_code
# Unit tests
class TestGetWebsiteStatus(unittest.TestCase):
@patch('requests.get')
def test_get_website_status(self, mock_get):
mock_get.return_value.status_code = 200
result = get_website_status("<http://example.com>")
self.assertEqual(result, 200)
if __name__ == "__main__":
unittest.main()
Ejercicio 3: Desarrollo Guiado por Pruebas (Test-Driven Development - TDD)
Elige una pequeña funcionalidad que desees implementar. Utilizando la metodología de desarrollo guiado por pruebas (TDD), escribe una prueba que falle para esta funcionalidad, luego escribe el código para que la prueba pase y, finalmente, refactoriza tu código. Repite este proceso varias veces hasta que hayas implementado completamente la funcionalidad.
Recuerda, la clave para un TDD exitoso es mantener los pasos pequeños: escribe una prueba pequeña, escribe solo el código suficiente para que la prueba pase y luego mejora el código. No intentes escribir todas las pruebas o todo el código de una vez. El TDD es un ciclo: prueba, código, refactoriza y luego vuelve a probar.
11.5 Ejercicios Prácticos
Ejercicio 1: Pruebas Unitarias
Escribe una función simple en Python que calcule el factorial de un número. Luego, escribe un conjunto de pruebas unitarias utilizando el módulo unittest
para probar esta función. Asegúrate de que tus pruebas cubran una variedad de entradas diferentes, incluyendo entradas válidas e inválidas.
import unittest
# The function to be tested
def factorial(n):
if n < 0:
raise ValueError("Factorial is not defined for negative numbers")
if n == 0:
return 1
return n * factorial(n - 1)
# Unit tests
class TestFactorial(unittest.TestCase):
def test_positive_number(self):
self.assertEqual(factorial(5), 120)
def test_zero(self):
self.assertEqual(factorial(0), 1)
def test_negative_number(self):
with self.assertRaises(ValueError):
factorial(-1)
if __name__ == "__main__":
unittest.main()
Ejercicio 2: Mocking y Patching
Supongamos que tienes una función que interactúa con un sistema externo, como hacer una solicitud HTTP a un servicio web. Utilizando el módulo unittest.mock
, escribe una prueba unitaria para esta función que simule la interacción externa.
import unittest
from unittest.mock import patch
import requests
# The function to be tested
def get_website_status(url):
response = requests.get(url)
return response.status_code
# Unit tests
class TestGetWebsiteStatus(unittest.TestCase):
@patch('requests.get')
def test_get_website_status(self, mock_get):
mock_get.return_value.status_code = 200
result = get_website_status("<http://example.com>")
self.assertEqual(result, 200)
if __name__ == "__main__":
unittest.main()
Ejercicio 3: Desarrollo Guiado por Pruebas (Test-Driven Development - TDD)
Elige una pequeña funcionalidad que desees implementar. Utilizando la metodología de desarrollo guiado por pruebas (TDD), escribe una prueba que falle para esta funcionalidad, luego escribe el código para que la prueba pase y, finalmente, refactoriza tu código. Repite este proceso varias veces hasta que hayas implementado completamente la funcionalidad.
Recuerda, la clave para un TDD exitoso es mantener los pasos pequeños: escribe una prueba pequeña, escribe solo el código suficiente para que la prueba pase y luego mejora el código. No intentes escribir todas las pruebas o todo el código de una vez. El TDD es un ciclo: prueba, código, refactoriza y luego vuelve a probar.
11.5 Ejercicios Prácticos
Ejercicio 1: Pruebas Unitarias
Escribe una función simple en Python que calcule el factorial de un número. Luego, escribe un conjunto de pruebas unitarias utilizando el módulo unittest
para probar esta función. Asegúrate de que tus pruebas cubran una variedad de entradas diferentes, incluyendo entradas válidas e inválidas.
import unittest
# The function to be tested
def factorial(n):
if n < 0:
raise ValueError("Factorial is not defined for negative numbers")
if n == 0:
return 1
return n * factorial(n - 1)
# Unit tests
class TestFactorial(unittest.TestCase):
def test_positive_number(self):
self.assertEqual(factorial(5), 120)
def test_zero(self):
self.assertEqual(factorial(0), 1)
def test_negative_number(self):
with self.assertRaises(ValueError):
factorial(-1)
if __name__ == "__main__":
unittest.main()
Ejercicio 2: Mocking y Patching
Supongamos que tienes una función que interactúa con un sistema externo, como hacer una solicitud HTTP a un servicio web. Utilizando el módulo unittest.mock
, escribe una prueba unitaria para esta función que simule la interacción externa.
import unittest
from unittest.mock import patch
import requests
# The function to be tested
def get_website_status(url):
response = requests.get(url)
return response.status_code
# Unit tests
class TestGetWebsiteStatus(unittest.TestCase):
@patch('requests.get')
def test_get_website_status(self, mock_get):
mock_get.return_value.status_code = 200
result = get_website_status("<http://example.com>")
self.assertEqual(result, 200)
if __name__ == "__main__":
unittest.main()
Ejercicio 3: Desarrollo Guiado por Pruebas (Test-Driven Development - TDD)
Elige una pequeña funcionalidad que desees implementar. Utilizando la metodología de desarrollo guiado por pruebas (TDD), escribe una prueba que falle para esta funcionalidad, luego escribe el código para que la prueba pase y, finalmente, refactoriza tu código. Repite este proceso varias veces hasta que hayas implementado completamente la funcionalidad.
Recuerda, la clave para un TDD exitoso es mantener los pasos pequeños: escribe una prueba pequeña, escribe solo el código suficiente para que la prueba pase y luego mejora el código. No intentes escribir todas las pruebas o todo el código de una vez. El TDD es un ciclo: prueba, código, refactoriza y luego vuelve a probar.
11.5 Ejercicios Prácticos
Ejercicio 1: Pruebas Unitarias
Escribe una función simple en Python que calcule el factorial de un número. Luego, escribe un conjunto de pruebas unitarias utilizando el módulo unittest
para probar esta función. Asegúrate de que tus pruebas cubran una variedad de entradas diferentes, incluyendo entradas válidas e inválidas.
import unittest
# The function to be tested
def factorial(n):
if n < 0:
raise ValueError("Factorial is not defined for negative numbers")
if n == 0:
return 1
return n * factorial(n - 1)
# Unit tests
class TestFactorial(unittest.TestCase):
def test_positive_number(self):
self.assertEqual(factorial(5), 120)
def test_zero(self):
self.assertEqual(factorial(0), 1)
def test_negative_number(self):
with self.assertRaises(ValueError):
factorial(-1)
if __name__ == "__main__":
unittest.main()
Ejercicio 2: Mocking y Patching
Supongamos que tienes una función que interactúa con un sistema externo, como hacer una solicitud HTTP a un servicio web. Utilizando el módulo unittest.mock
, escribe una prueba unitaria para esta función que simule la interacción externa.
import unittest
from unittest.mock import patch
import requests
# The function to be tested
def get_website_status(url):
response = requests.get(url)
return response.status_code
# Unit tests
class TestGetWebsiteStatus(unittest.TestCase):
@patch('requests.get')
def test_get_website_status(self, mock_get):
mock_get.return_value.status_code = 200
result = get_website_status("<http://example.com>")
self.assertEqual(result, 200)
if __name__ == "__main__":
unittest.main()
Ejercicio 3: Desarrollo Guiado por Pruebas (Test-Driven Development - TDD)
Elige una pequeña funcionalidad que desees implementar. Utilizando la metodología de desarrollo guiado por pruebas (TDD), escribe una prueba que falle para esta funcionalidad, luego escribe el código para que la prueba pase y, finalmente, refactoriza tu código. Repite este proceso varias veces hasta que hayas implementado completamente la funcionalidad.
Recuerda, la clave para un TDD exitoso es mantener los pasos pequeños: escribe una prueba pequeña, escribe solo el código suficiente para que la prueba pase y luego mejora el código. No intentes escribir todas las pruebas o todo el código de una vez. El TDD es un ciclo: prueba, código, refactoriza y luego vuelve a probar.