Testing: a dormir tranquilos
Aprendiendo los beneficios del testing
Nota:
Esto no es más que una recopilación de charlas relacionadas con el testing y sobre como escribir buenos tests
"Testing is a process of executing a program with the intent of finding errors... This definition of testing has many implications... it implies that testing is a destructive process, even sadistic process, which explains why most people find it difficult"
Glendford J. Myers (1979)
¿Por qué escribir test?
¿Cómo convencerte de que hay que escribir tests?
Es tu
Responsabilidad
Es tu Responsabilidad
- Master chef: ¿Has probado el plato?
- Hacer software que funciona
- Poder hacer un cambio rápido y estar tranquilo de que no has roto nada
- Eres ingeniero, es tu responsabilidad
Refactor
- Cambiar código sin test es como hacer malabares con cuchillos
- Los test nos proporcionan un arnés de seguridad
- Cambiar por dentro sin que se vea afectado el comportamiento observado. La única manera de hacer esto es teniendo uns test que comprueben que todo sigue igual
Documentación
- Es la mejor manera de saber cómo funciona nuestro sistema
Es una herramienta para Diseñar
- Nos ayuda a definir los contratos/interfaces
- Pensar: casos de error, exponer dependencias, dar soluciones concretas a problemas,...
- Conocer principios SOLID, Principios del testing,...
Es Dinero
- Salva dinero: menos bugs, ir con más seguridad,...
- Al testear estamos haciendo una labor "sádica" de ver que eso funciona
- Nos va a permitir ir más seguros porque tenemos una red de seguridad
"Bad code affect to your Customer"
Martin Fowler
Tipos de Tests
Mitos del testing
Los test incrementan la calidad del códigoUsar nombres apropiados y el código lo entiende cualquier compañeroEl software testeado está libre de bugsProporcionan un arnés para que se rompa nada que ya estaba funcionandoNo me da tiempo de hacer testspero si da tiempo a horas de debug y var_dump en producciónLos test son opcionalesForman parte de la tareaTodo tiene que estar testeadoSólo lo que aporte valor
Pirámide del testing
Pirámide del testing
Depende del valor que aporten
Test Aceptación
- Se hacen desde el punto de vista del usuario
- Similares a lenguaje natural (Selenium, Behat)...
- Frágiles
Test de integración
- Prueban como 2 módulos se relacionan entre ellos
- Son parecidos a los unitarios, sólo que interactuan con un sistema externo
Test unitarios
Un test unitario testea una clase- Testean una unidad: testear el estados y como trabaja con colaboradores
- Deben ser aislados(isolated) de sus colaboradores
- El scope debe ser pequeño
Se tarda mucho en aprender a programar... pues lo mismo se tarda en aprender a testear
Hay reglas que aplican en desarrollo que no aplican en testing, p.e. DRY
Carácteristicas test unitarios
- Fast
- Isolated
- Repeteable
- Self-verifing
- Timely/Transparent
Test dobles
- Stub Canned Response
- Mocks Expectations
- Spies Saved Information
- Fakes Near to Real One
- Dummy Not make Anything
Nombrar un Test
- Directorio de Tests Unitarios Misma estructura que el código
- Clases de Tests xxxTest
- Clases de ayuda para los Tests xxProvider
- Nombre de los métodos shouldReturnxx -> Describe lo que probamos
Reglas para escribir un Test
- Given
- When
- Then
Antes de un refactor hacer unos pocos test aunque sean de aceptación"When you are very thirsty, even dirty water will keep you alive"
J. B. Rainsbergerg
Antipatrones de Test
- Anémico Probar los getter/setter de atributos de clase
- Obeso Test pequeños que solo prueban 1 comportamiento -> Cuando el test falle: ¿Por qué falla el test?
- Listillo Test con lógica if/random... fechas
- Tartamudo Un test que testee el test...
- No confiable Usar constantes de producción en los tests
A tener en cuenta a la hora de hacer tests
- Test frágiles
- Mockear demasiado
- Test deben passar en cualquier máquina
- Test no deben de ser dependientes
Bibliografía
- "Testad malditos" ("Test damned") - Jorge J. Barroso
- Adicto al verde - Joaquin Engelmo
- Elegant?? Unit testing - Pablo Guardiola
- Lo que deberías saber sobre testing para irte de cañas con @pedro_g_s y no empezar con resaca - Sergio Arroyo
- Clean Code, SOLID, CQRS... ¿Y qué hay de nuestros test? - Rafa Gomez y Javier Ferrer