Skip to content

Commit dfe8093

Browse files
committed
mouredev#13 - Python
1 parent 079dd1b commit dfe8093

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
"""
2+
Pruebas Unitarias
3+
"""
4+
# Pruebas unitarias: Son pruebas que se aplican a funciones o métodos individuales de un programa para verificar que funcionan correctamente de manera aislada.
5+
6+
import unittest # Librería estándar de Python para pruebas unitarias.
7+
from datetime import datetime, date # Importamos datetime y date para trabajar con fechas
8+
9+
10+
def sumar(a, b):
11+
# Verificamos que ambos argumentos sean números (int o float)
12+
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
13+
raise ValueError("Los argumentos deben ser números")
14+
# Retornamos la suma de a y b
15+
return a + b
16+
17+
# Definimos una clase de prueba que hereda de unittest.TestCase
18+
# Esta clase contendrá nuestros métodos de prueba
19+
# nota: En unittest, cualquier método dentro de una clase que herede de unittest.TestCase será reconocido como un test solo si su nombre comienza con test_. Si no usa ese prefijo, unittest lo ignorará y no lo ejecutará.
20+
class TestSum(unittest.TestCase):
21+
22+
def test_sum(self):
23+
# Comprobamos que sumar(5,4) devuelve 9
24+
self.assertEqual(sumar(5, 4), 9)
25+
# Otros casos de prueba con diferentes combinaciones
26+
self.assertEqual(sumar(-2, 1), -1)
27+
self.assertEqual(sumar(0, 0), 0)
28+
self.assertEqual(sumar(-1, -1), -2)
29+
self.assertEqual(sumar(1.5, 2.5), 4.0)
30+
self.assertEqual(sumar(1, -1), 0)
31+
32+
33+
# Comprobamos que la función devuelve un error si los argumentos no son números
34+
# En este caso, usamos assertRaises para verificar que se lanza una excepción ValueError
35+
def test_sum_invalid(self):
36+
# Verificamos que si se pasan valores inválidos, se lance ValueError
37+
with self.assertRaises(ValueError):
38+
sumar("5", 3)
39+
with self.assertRaises(ValueError):
40+
sumar(5, "3")
41+
with self.assertRaises(ValueError):
42+
sumar("5", "3")
43+
with self.assertRaises(ValueError):
44+
sumar(None, 3)
45+
with self.assertRaises(ValueError):
46+
sumar(5, None)
47+
with self.assertRaises(ValueError):
48+
sumar(None, None)
49+
with self.assertRaises(ValueError):
50+
sumar("a", 3)
51+
with self.assertRaises(ValueError):
52+
sumar(5, "b")
53+
#Se usa assertEqual para comparar resultados y assertRaises para validar excepciones esperadas.
54+
55+
#Esto permite que los tests solo se ejecuten cuando el script se corre directamente y no si se importa desde otro archivo.
56+
# if __name__ == '__main__':
57+
# unittest.main()
58+
59+
60+
61+
62+
"""* DIFICULTAD EXTRA (opcional):
63+
* Crea un diccionario con las siguientes claves y valores:
64+
* "name": "Tu nombre"
65+
* "age": "Tu edad"
66+
* "birth_date": "Tu fecha de nacimiento"
67+
* "programming_languages": ["Listado de lenguajes de programación"]
68+
* Crea dos test:
69+
* - Un primero que determine que existen todos los campos.
70+
* - Un segundo que determine que los datos introducidos son correctos."""
71+
72+
73+
74+
75+
76+
# Creamos una clase de prueba que hereda de unittest.TestCase
77+
class TestData(unittest.TestCase):
78+
79+
# Este método se ejecuta antes de cada test, para preparar datos comunes
80+
def setUp(self):
81+
# Creamos un diccionario con datos ficticios de ejemplo
82+
self.data = {
83+
"name": "Complex303", # Cadena
84+
"age": 2, # Entero
85+
# Convertimos la cadena "01-01-16" a objeto date usando strptime y date()
86+
"birth_date": datetime.strptime("01-01-16", "%d-%m-%y").date(),
87+
# Lista de lenguajes de programación
88+
"programming_languages": ["Python", "Java", "C#"]
89+
}
90+
91+
# Primer test: verifica que las claves existan en el diccionario
92+
def test_fields_exist(self):
93+
self.assertIn("name", self.data) # Verifica que "name" exista en self.data
94+
self.assertIn("age", self.data) # Verifica que "age" exista en self.data
95+
self.assertIn("birth_date", self.data) # Verifica que "birth_date" exista
96+
self.assertIn("programming_languages", self.data) # Verifica que "programming_languages" exista
97+
98+
# Segundo test: valida que cada valor tenga el tipo de dato correcto
99+
def test_data_is_correct(self):
100+
self.assertIsInstance(self.data["name"], str) # Que "name" sea cadena
101+
self.assertIsInstance(self.data["age"], int) # Que "age" sea entero
102+
self.assertIsInstance(self.data["birth_date"], date) # Que "birth_date" sea un objeto date
103+
self.assertIsInstance(self.data["programming_languages"], list) # Que "programming_languages" sea lista
104+
105+
106+
unittest.main()
107+
108+
109+
# setUp(self): se ejecuta antes de cada test. Aquí inicializas los datos de prueba.
110+
111+
# assertIn(clave, diccionario): verifica que la clave exista en el diccionario.
112+
113+
# assertIsInstance(valor, tipo): verifica que el valor sea de un tipo específico.
114+
115+
# unittest.main(): ejecuta todos los métodos que comienzan con test_.

0 commit comments

Comments
 (0)