Café y Código

8. Excepciones esperadas

Probar que algo debe fallar

Cuando una API promete lanzar ValueError ante datos inválidos, el test debe comprobarlo explícitamente.

pytest.raises
PYTHON
1 import pytest
2
3 def dividir(a, b):
4 if b == 0:
5 raise ValueError("divisor cero")
6 return a / b
7
8 def test_division_por_cero():
9 with pytest.raises(ValueError, match="divisor"):
10 dividir(1, 0)

Acceder a la excepción

info.value
PYTHON
1 def test_exc_info():
2 with pytest.raises(ValueError) as info:
3 int("no-es-numero")
4 assert "invalid literal" in str(info.value)

Ejercicio 1

Escribí una función primer_elemento(seq) que lance IndexError si la secuencia está vacía, y un test con pytest.raises(IndexError).

Ver solución propuesta
PYTHON
1 import pytest
2
3 def primer_elemento(seq):
4 if not seq:
5 raise IndexError("vacío")
6 return seq[0]
7
8 def test_vacio():
9 with pytest.raises(IndexError):
10 primer_elemento([])

Ejercicio 2

¿Qué diferencia hay entre un test que espera una excepción y un test que deja pasar un bug no controlado?

Ver idea guía

El primero documenta un contrato (entrada inválida → error controlado). El segundo hace fallar el suite por un comportamiento no previsto.

Ponte a prueba

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.