Breve introducción a TDD

Extreme programming

Kent Beck

  • Programación en pares
  • Refactorización
  • TDD
  • ...

Valores

  • Simplicidad
  • Comunicación
  • Retroalimentación
  • Valentía
  • Respeto

TDD

No se escribe código sin antes escribir una prueba unitaria que especifica su objetivo y comprueba que se cumple.

1. Escribe el primer test

def test_add():
    assert add() == 8

calc.py

2. El test tiene que fallar

$ pytest calc.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

calc.py:2: NameError

================================= 1 failed in 0.08 seconds ================================

3. Escribe solo el código necesario

def add():
    return 8

def test_add():
    assert add() == 8

calc.py

4. Corre el test

$ pytest calc.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 .                                                                                                                                      [100%]

================================= 1 passed in 0.07 seconds ============================

5. Escribe otro test

def add():
    return 8

def test_add_equals_to_8():
    assert add() == 8

def test_add_equals_to_5():
    assert add() == 5

calc.py

6. El último test debe fallar

$ pytest calc.p
============================= 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()

calc.py:8: AssertionError
============================= 1 failed, 1 passed in 0.11 seconds =================

7. Refactoriza

def add(first_number, second_number):
    return first_number + second_number

def test_add_equals_to_8():
    assert add(5, 3) == 8

def test_add_equals_to_5():
    assert add(2, 3) == 5

calc.py

$ pytest calc.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 ..                                                                                                                                     [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

¿Preguntas?

Más información

https://github.com/mayela/demo-pytest

¡Gracias!

Breve introducción a TDD

By Maricela Sanchez

Breve introducción a TDD

  • 867