Sara María Mejia Sánchez
Sara María Mejia Sánchez
La creación de funciones y pruebas para el código que se va a producción es clave para validar resultados correctamente. En Python, el uso de Unit Testing simplifica este proceso, permitiendo automatizar pruebas y hacerlas más legibles y eficientes, además de integrarse fácilmente con sistemas de Continuous Integration.
¿Cómo mejorar la legibilidad de las pruebas con Unit Testing?
Python incluye Unit Testing de forma nativa, proporcionando clases reutilizables para ejecutar pruebas de manera automática o manual. Esta herramienta no solo permite mejorar la legibilidad, sino también identificar y solucionar errores rápidamente, sin necesidad de depender de print para verificar si las pruebas se están ejecutando.
¿Cómo estructurar un proyecto de testing en Python?
src y las pruebas en una carpeta test.python -m venv, lo que genera una carpeta con binarios y librerías solo para el proyecto..gitignore para evitar que el entorno virtual y otros archivos no deseados se suban al repositorio.¿Cómo escribir y ejecutar pruebas con Unit Test?
Para escribir pruebas, sigue estas buenas prácticas:
test_calculator.py, y empieza importando Unit Test.unittest.TestCase.assertEqual para verificar resultados.Ejemplo básico de prueba:
import unittest from src.calculator import add, subtract class TestCalculator(unittest.TestCase): def test_add(self): self.assertEqual(add(2, 3), 5) def test_subtract(self): self.assertEqual(subtract(10, 5), 5)
Ejecuta las pruebas con python -m unittest discover para que Unit Testing encuentre y ejecute las pruebas automáticamente.
¿Qué hacer cuando una prueba falla?
Si una prueba falla, Unittest lo indica con una "F", mostrando el error detallado, lo que facilita la depuración. Puedes forzar un fallo, por ejemplo, esperando que la suma de 2 + 3 sea 6 en lugar de 5, para ver cómo se comporta.
Sara María Mejia Sánchez
Sara María Mejia Sánchez
Paolo Quintero
Por si alguien llega al tener el mismo problema que yo en windows.
Les explico luego del comando para crear el entorno que es
python3 -m venv nombre_del_entorno
para activarlo es
.\nombre_del_entorno\Scripts\Activate
Acá puede darles el error UnauthorizedAccess esto sucede si la terminal por defecto que usan en VSC es PowerShell. En este caso solo escriban el comando
cmd
Y los cambia a una terminal con el entorno ya activa y si no solo escriban de nuevo el comando ya activado
debería ser algo así
(venv) C:\ruta\de\tu\proyecto>
Marcos Cabral
Gracias por el aporte. Ese error me apareció justamente. Solamente escribí "cmd" en la línea de comandos y quedó listo.
Muchas gracias.
Axel Yaguana
Team PlatziEstoy siguiendo el curso junto con la documentación de unittest:
Luis Martinez
ProfesorBuena manera! me cuentas si tienes alguna duda.
ADAN ARTURO MARTINEZ ALBERTO
Importante tomar en cuenta que para que encuentre las pruebas, las funciones de la clase CalculatorTest deben contener el nombre de test_Nombre, por que si cambian por ejemplo el nombre a TEST_Nombre, no funciona
JOSUE MARTIN CHI PERERA
Que tal?, les comparto el código que avance:
El siguiente es del archivo calculator.py:
def sum(a, b): return a + b def subtract(a, b): return a - b def multiplication(a, b): return a * b def division(a, b): if b == 0: return "NA" return a / b ```Y este del tests.py: ```js import unittest from src.calculator import sum, subtract, division, multiplication #functionalities for viewing the tests' progress class CalculatorTests(unittest.TestCase): def test_sum(self): assert sum(7, 3) == 10 def test_subtract(self): assert subtract(11, 5) == 6 def test_multiplication(self): assert multiplication(50, 0) == 0 def test_division(self): assert division(22, 11) == 2 def test_division_zero(self): assert division(22, 0) == "NA"
Emilio Nicolás Mendoza Patti
Como vengo de otros cursos de python y hace tiempo que deje de usar pip y venv y ahora uso uv en mac (https://docs.astral.sh/uv/getting-started/installation/#homebrew)
Hice:
uv init
Esto ya genera el .venv y el .gitignore
Instalo la dependencia
uv add ipdb
y para ejecutar uso:
uv run python main.py
De esta manera no me tengo que preocupar crear o entrar en el entorno virtual y manejo de mejor forma mis dependencias.
Nelson Andrés Cerón Varela
import unittest
from src.calculator import sum, subtract, multiply, divide
class CalculatorTests(unittest.TestCase):
def test_sum(self):
assert sum(2, 3) == 5
def test_subtract(self):
assert subtract(10, 5) == 5
def test_multiply(self):
assert multiply(2, 3) == 6
def test_divide(self):
assert divide(10, 5) == 2
def test_divide_by_zero(self):
with self.assertRaises(ValueError):
divide(10, 0) == ValueError("No se puede dividir por cero")
Luis Martinez
ProfesorSe ve que estás aprendiendo, por fa revisa como usar markdown para que se pueda ver el código coloreado en la plataforma.
John Eduard Meneses González
Francisco Antonio Hernandez Sabatino
Uber Cardoso
Un buen recurso para generar gitignore es este simplemente le dices para que sistema operativo lo quires y que lenguaje y listo, ya solo copias eso que te da y lo pegas en tu archivo .gitgnore
David Leonardo Chacón
Pyenv y venv no son lo mismo, aunque ambos se utilizan para gestionar entornos de Python.
Pyenv: Permite instalar y gestionar múltiples versiones de Python en tu sistema. Es útil si necesitas trabajar con diferentes versiones de Python para distintos proyectos.
venv: Es un módulo integrado en Python que permite crear entornos virtuales aislados. Estos entornos permiten gestionar las dependencias de un proyecto sin interferir con otros proyectos o la instalación global de Python.
Ambos son herramientas complementarias y se pueden utilizar juntas para una mejor gestión de proyectos en Python.
Luis Enrique Rios
Intento seguir las clases con notebooks para asi poder tomar algunos apuntes, pero este test, no me retorna nada, si alguien sabe si es por el notebook o si debo hacer algo adicional le agradezco cualquier respuesta.
Melissa Rodríguez
Hola, ¿Dónde puedo encontrar el link de como instalar python? (En el video indica que está en la sección de recursos, pero sólo veo código: .gitignore, src y tests
Daniel Felipe Ospina Guarnizo
Mi solución al reto:
César Ernesto Rivas Martínez
Miguel Angel Castillo Enriquez
Para activar el entorno virtual en windows usa venv\Scripts\activate, venv es el nombre de la carpeta que se puso al entorno virtual.
Erick Arellano
Laura Bedoya
La diferencia radica en la configuración de Visual Studio Code (VSCode) y la terminal de tu sistema. VSCode puede ejecutarse en un entorno de terminal integrado que permite comandos de shell, incluyendo la creación de entornos virtuales. Si el profesor lo hizo desde VSCode, es probable que haya configurado adecuadamente esta terminal. Si tú no pudiste, es posible que necesites abrir el terminal de VSCode o verificar que esté configurado para usar el terminal correcto. Asegúrate de tener Python instalado y de que el entorno esté activado correctamente.
Emmanuel Ferreyra
Aqui va mi codigo :)
def sum(a, b): return a + b def subtract(a, b): return a - b def multiplication(a, b): return a * b def division(a, b): if b == 0: return "No se puede dividir por 0" return a / b ```Pruebas: ```js import unittest from src.calculator import sum, subtract, multiplication, division class CalculatorTest(unittest.TestCase): def test_sum(self): assert sum(2, 3) == 5 def test_substract(self): assert subtract(10, 5) == 5 def test_multiplication(self): assert multiplication(5, 2) == 10 def test_division(self): assert division(6, 3) == 2 assert division(15, 0) == "No se puede dividir por 0"
Hola, les comparto el código de la clase, incluyendo las pruebas unitarias par multiplicacion, divicion y division por cero.
import unittest from src.calculator import addition, subtraction, multiplication, division """ Esta clase nos va a dar una serie de funcionalidades que nos van a permitir ver el progreso de las pruebas, qué prueba se ejecutó, qué prueba falló, por qué falló """ class CalculatorTest(unittest.TestCase): def test_addition(self): assert addition(2, 3) == 5 def test_subtraction(self): assert subtraction(10, 5) == 5 def test_multiplication(self): assert multiplication(2, 4) == 8 def test_division(self): assert division(30, 2) == 15 def test_division_by_zero(self): with self.assertRaises(ZeroDivisionError): division(30, 0)
Reto de la clase!!
def sum(a, b): return a + b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): if b == 0: raise ValueError("Cannot divide by zero") return a / b
import unittest from src.calculator import sum, subtract, multiply, divide class CalculatorTests(unittest.TestCase): def test_sum(self): assert sum(2, 3) == 5 def test_subtract(self): assert subtract(10, 5) == 5 def test_multiply(self): assert multiply(3, 4) == 12 def test_divide(self): assert divide(10, 2) == 5 with self.assertRaises(ValueError): divide(10, 0)
def sum(a: int | float, b: int | float) -> int | float: return a + b def subtrac(a: int | float, b: int | float) -> int | float: return a - b def multiply(a: int | float, b: int | float) -> int | float: return a * b def divide(a: int | float, b: int | float) -> int | float: if 0 in [a, b]: raise ValueError("Zero division error") return a / b
import unittest from src.calculator import sum, subtrac, multiply, divide class CalculatorTest(unittest.TestCase): def test_sum(self): assert sum(2, 3) == 5 assert sum(2, 3.0) == 5.0 assert sum(2, -3) == -1 # para que funcionen los metodos debe empezaar por 'test_nombre_metodo" def test_subtrac(self): assert subtrac(5, 3) == 2 assert subtrac(3, 5) == -2 def test_multiply(self): assert multiply(2, 3) == 6 assert multiply(-2.0 , -2) == 4.0 assert multiply(2, 0) == 0 def test_divide(self): assert divide(9, 3) == 3 with self.assertRaises(ValueError): divide(10, 0)
from src.calculator import sum, subtract, multiply, divide class CalculatorTests(TestCase): def test_sum(self): assert sum(1, 2) == 3 def test_subtract(self): assert subtract(2, 1) == 1 def test_multiply(self): assert multiply(2, 3) == 6 def test_divide(self): assert divide(6, 2) == 3 def test_divide_by_zero(self): with self.assertRaises(ZeroDivisionError): divide(6, 0) ``````python from unittest import TestCase from src.calculator import sum, subtract, multiply, divide class CalculatorTests(TestCase): def test_sum(self): assert sum(1, 2) == 3 def test_subtract(self): assert subtract(2, 1) == 1 def test_multiply(self): assert multiply(2, 3) == 6 def test_divide(self): assert divide(6, 2) == 3 def test_divide_by_zero(self): with self.assertRaises(ZeroDivisionError): divide(6, 0)