(Breve)Introducción al desarrollo guiado por pruebas
Agenda
- Pruebas unitarias
- ¿De dónde viene el desarrollo guiado por pruebas?
- ¿De qué va el desarrollo guiado por pruebas?
- Práctica
- ¿Qué es un entorno virtual de desarrollo?
- Instalación de virtualenv
- Creación y activación de un ambiente virtual
- Instalación de paquetes
- Desarrollo guiado por pruebas de la función suma
- Ventajas y desventajas
- Conclusión
Pruebas unitarias
Es un bloque de código que comprueba el correcto funcinamiento de una unidad de código fuente.
¿De dónde viene el desarrollo guiado por pruebas?
Extreme programming
Kent Beck
- Programación en pares
- Refactorización
- TDD
- ...
¿De qué va el desarrollo guiado por pruebas?
No se escribe código sin antes escribir una prueba unitaria que especifica su objetivo y comprueba que se cumple.
Práctica
¿Qué es un ambiente virtual de desarrollo?
Es un ambiente totalmente aislado donde puedes manipular las dependencias de tu proyecto con mayor flexibilidad.
Instalación
pip install virtualenv
Creación de un entorno virtual y activación
virtualenv venv
source venv/activate
Pytest
pytest es un framework que hace fácil la creación de pequeñas pruebas unitarias hasta complejas pruebas funcionales.
Instalación de pytest
pip install pytest
clonar el repositorio:
https://github.com/mayela/clase-muestra-tdd.git
1. Escribe el primer test
def test_add():
assert add() == 8
tests.py
2. El test tiene que fallar
$ venv/bin/pytest tests.py
=================================== test session starts ====================================
platform linux -- Python 3.6.6rc1, pytest-3.6.1, py-1.5.3, pluggy-0.6.0
rootdir: /data/Documentos/proyectos-python/demo-pytest, inifile:
collected 1 item
calc.py F [100%]
=================================== FAILURES ==============================================
___________________________________ test_add ______________________________________________
def test_add():
> assert add() == 8
E NameError: name 'add' is not defined
tests.py:2: NameError
================================= 1 failed in 0.08 seconds ================================
3. Escribe solo el código necesario
# calc.py
def add():
return 8
# tests.py
def test_add():
assert add() == 8
4. Corre el test
$ venv/bin/pytest tests.py
================================= test session starts =================================
platform linux -- Python 3.6.6rc1, pytest-3.6.1, py-1.5.3, pluggy-0.6.0
rootdir: /data/Documentos/proyectos-python/demo-pytest, inifile:
collected 1 item
tests.py . [100%]
================================= 1 passed in 0.07 seconds ============================
5. Escribe otro test
# calc.py
def add():
return 8
# tests.py
def test_add_equals_to_8():
assert add() == 8
def test_add_equals_to_5():
assert add() == 5
6. El último test debe fallar
$ venv/bin/pytest tests.py
============================= test session starts ================================
platform linux -- Python 3.6.6rc1, pytest-3.6.1, py-1.5.3, pluggy-0.6.0
rootdir: /data/Documentos/proyectos-python/demo-pytest, inifile:
collected 2 items
calc.py .F [100%]
============================= FAILURES ===========================================
_____________________________ test_add_equals_to_5 _______________________________
def test_add_equals_to_5():
> assert add() == 5
E assert 8 == 5
E + where 8 = add()
tests.py:8: AssertionError
============================= 1 failed, 1 passed in 0.11 seconds =================
7. Refactoriza
# calc.py
def add(first_number, second_number):
return first_number + second_number
# tests.py
def test_add_equals_to_8():
assert add(5, 3) == 8
def test_add_equals_to_5():
assert add(2, 3) == 5
$ venv/bin/pytest tests.py
============================== test session starts ================================
platform linux -- Python 3.6.6rc1, pytest-3.6.1, py-1.5.3, pluggy-0.6.0
rootdir: /data/Documentos/proyectos-python/demo-pytest, inifile:
collected 2 items
tests.py .. [100%]
============================== 2 passed in 0.07 seconds ============================
Recapitulando...
Ventajas
- Código de mayor
calidad . - Desarrollas solo el código
necesario . - Los errores se corrigen en etapas tempranas del desarrollo.
Desventajas
- Curva de
aprendizaje - Adopción del proceso
Conclusión
El desarrollo guiado por pruebas es una técnica que ayuda a desarrollar código de mayor calidad, vale la pena invertir tiempo en familiarizarse con esta práctica
¡Gracias!
intro-tdd
By Maricela Sanchez
intro-tdd
- 789