Acerca de este libro
- Gracias
Introducción: Del ojímetro al tdd
- Entonces descubres los tests
- Control de calidad
- Tests funcionales
- Anatomía de un test
- Manejo de las dependencias
- Cuándo toca hacer tests
- Test Driven Development
- Qué incluir en los tests y qué no
- Y esto es casi todo
Testing desde cero
- Qué es software testing
- A mano o a máquina
- Qué sometemos a test
- Qué es hacer un test
- Estructura básica de un test
- La elección de los casos para testear
- Frameworks para testing
- Cuándo testear
Testing en contexto
- Taxonomía de tests
- La pirámide de tests funcionales
- Utilidad de la pirámide de tests
- Smells en la pirámide de los tests funcionales
Psicología del testing
- ¿Por qué nos cuesta el testing?
- El concepto de test y la necesidad de testear
- Sentimos apego por nuestro código
- La dificultad técnica del testing
- La presión para no testear
- Testear no es igual a confirmar que funciona
- Responsabilidad ética y testeo
Primer test
- Frameworks al rescate
- El primer test
- Testeando que podemos añadir productos al carro
- Redundancia de tests
- Otros tests
- Descubriendo implementaciones incorrectas
- Últimos tests
- Hemos terminado… de momento
Un ejercicio para aprender TDD
- Repasando conceptos
- La kata del DNI
- El ciclo red-green-refactor
- Volviendo al rojo: hagamos un nuevo test
- Refactor
- Retomando el desarrollo
- El curioso problema de los tests que pasan a la primera
- Resolución de bugs mediante TDD
Desarrollar un algoritmo paso a paso con TDD: Luhn Test kata
- Sobre la Luhn Test kata
- Empecemos con un test
- Empezando con el código de producción
- Buscando un nuevo ejemplo
- Los tests deben forzar implementaciones
- Buscando un algoritmo más general
- Añadiendo prestaciones
Clean testing
- Naming de los test
- Eliminar los números mágicos
- Extrae métodos, también en tests
- Esperar excepciones
- Métodos
assert*
Test doubles (1)
- El concepto de test double
- Por qué y para qué de los tests doubles
- Test doubles y dónde encontrarlos
- Alternativas para generar test doubles
Test doubles (2) Principios de diseño
- Principios de diseño y doubles
- Un ejemplo
- En resumen
Test doubles 3: un proyecto desde cero
- Las piezas del puzzle
- Test doubles en acción
- Cómo hacer Test Driven Development de un Use Case
- Reorganizando el test
- Asegurando que el Cliente puede contratar el Producto
- Cuando necesitamos hacer mocks
- Usar un spy hecho a mano
- Qué ha pasado aquí
- Qué hacer a continuación
Resolver problemas con baby-steps
- Un problema sencillo, pero con intríngulis
- Un problema de TDD
- El enfoque de tests antes que el código pero que no es TDD
- El enfoque TDD
- Conclusiones
Usar el code coverage para mejorar los tests
- Code coverage y refactoring
- Para finalizar
Testeando lo impredecible
- Generando contraseñas para humanos
- Determinismo y predictibilidad
- A ver qué sale
- Generando un password legible
- Testeando el azar
- Probamos nuestro generador de contraseñas
- Queremos contraseñas más difíciles
- Decorar es extender por composición
- Veamos cómo usarlo
- Cosas por hacer
- Algunas referencias
TDD en PHP. Un ejemplo con colecciones (1)
- ¿Qué tendría que tener una clase Collection?
- Escribiendo el primer mínimo test que falle
- Pongamos un poco de comportamiento aquí
- Controlando qué ponemos en la colección
- Refactorizar el test
- Antes de terminar, hagamos unos arreglos
- Y un extra
- Fin del primer acto
TDD en PHP. Un ejemplo con colecciones (2)
- Testing dirigido por Checklist
- Filosofía de las colecciones
- Implementar el método
each - Recapitulando
each
TDD en PHP. Un ejemplo con colecciones (3)
- Pipeline en el método
each - Una digresión: mutable, modificable o todo lo contrario
- Antes de implementar el método
map - Implementando
map - Para finalizar (por ahora)
TDD en PHP. Un ejemplo con colecciones (4)
- Estos capítulos tratan de TDD más que de Collections
- Filtrando una colección
- Ahorrando algunos tests con return type y type hinting
- ¿Algo que refactorizar?
- Devolver un objeto
- Fin del capítulo
TDD en PHP. Un ejemplo con colecciones (5)
- Reduciendo colecciones
- Métodos útiles para nuestras colecciones
- Devolviendo el contenido de la colección
- Métodos de utilidad
- Refactor final
Apéndices
Apéndice 1: PhpUnit
- Instalación
- Configuración básica
Apéndice 2: PhpSpec
- Instalación
- Configuración inicial
- Specification by example
- Primera especificación
Apéndice 3: Codeception
- Instalación
- Ejemplo de uso
Apéndice 4: Talking Bit dojo + PHPStorm
- Uso básico de docker
- Configuración de PHPStorm
- Consideraciones finales