Testing con Spring 3Because seeds grow in the
Soy Israel Alcázar                Aprendiz de todo, maestro de nada.@ialcazarfarmerdev.com                Me gusta trabaja...
Empecemos....¡¡¡Con Pasión!!!
Empecemos por  el principio
Para qué sirve Spring Contenedor ligero de objetos planos (POJO) Permite inversión de control e inyección dedependencias. ...
¿Por qué testing con Spring?Es Java. Framework mas utilizado en el desarrollo deaplicaciones JEE.Permite POJOs → Orientado...
Un poco de historia2004: Spring 1.02006: Spring 2.02007: Spring 2.52010: Spring 3.02011: Spring 3.1
Arquitectura
Arquitectura
Arquitectura
¿Qué tipos de test puedo realizar? Test Unitarios Test de Integración
¿Qué tipos de test puedo realizar?              ¿Estás seguro joven                   Padawan? Test Unitarios Test de Inte...
¿Qué tipos de test puedo realizar?Un test unitario debe ser: Rápido Independiente del entorno Repetible en el tiempo Valid...
¿Qué es TDD?Test Driven DevelopmentDesarrollo Digido por Pruebas
¿Qué es TDD?Diseño Dirigido por Ejemplos(Examples Driven Design)
Los pasos de TDD:
Los pasos de TDD:
Los pasos de TDD:
Estructura de una aplicación         con Spring
Estructura de una aplicación                                  Persistencia                                  PersistenciaVi...
Estructura de una aplicación                                       Persistencia                                       Pers...
Estructura de una aplicación                                          Persistencia                                        ...
¿Por dónde empiezo?
Cogiendo flow...Funcionalidad                           Controller                De fuera hacia dentro...
Cogiendo flow...Funcionalidad                        Controller                  Tests Unitarios
Cogiendo flow...Funcionalidad                           Controller                Colaboradores son dobles
Cogiendo flow...Funcionalidad                       Controller   Permite centrarse en la colaboración entre               ...
Cogiendo flow...Funcionalidad                        Controller                   Utilizamos...
Cogiendo flow...Funcionalidad                        Controller                   Utilizamos...
Cogiendo flow...La inicialización:
Cogiendo flow...La inicialización:                     Inyección del                      Inyección del                   ...
Cogiendo flow...El método de test:
Cogiendo flow...El método de test:                     Comportamiento                     Comportamiento                  ...
Cogiendo flow...El método de test:                     Lo que estamos                     Lo que estamos                  ...
Cogiendo flow...El método de test:                     Verificación del                     Verificación del              ...
Cogiendo flow...El controller: Es una clase plana
¿Y ahora qué?
Creando la lógica de negocioFuncionalidad                Controller                                        Lógica de      ...
Creando la lógica de negocio     La Lógica de negocio:
Creando la lógica de negocio     La Lógica de negocio:                        Colaboradores                        Colabor...
Creando la lógica de negocio                       Comportamiento                       Comportamiento     La Lógica de ne...
Creando la lógica de negocio     La Lógica de negocio:erificación                         Verificación                    ...
Creando la lógica de negocio                        El código                        El código                        resu...
¿Dónde está Spring?
Ten en cuentaSpring no aparece en los test unitarios
Ten en cuenta  Spring no aparece en los test unitariosDiseña tus clases sin pensar en frameworks
Ten en cuenta  Spring no aparece en los test unitariosDiseña tus clases sin pensar en frameworks    TDD como herramienta d...
Ya tenemos los test unitarios.        ¿Qué hago?
Test de Integración                                      Persistencia                                      PersistenciaVis...
Test de Integración                                    Persistencia                                    PersistenciaControl...
Ahora con SpringEs el momento de utilizar Spring       como pegamento
Ahora con Spring   Un ejemplo
Ahora con SpringAparecen:                 @Service                     @Inject    @Inject    @Component
Ahora con Spring ¡¡He perdido mi flow!!
Ahora con Spring¡¡Es fácil caer en la anarquía y el caos en           los test de integración!!                  @Service ...
Recuerda el poder            Recuerda el poder                del TDD                del TDDKent Beck
Consejo No abandones el TDD en los test deintegración, deja que estos te guíen...
¿Qué pasa con          ¿Qué pasa con          los baby steps?           los baby steps?                                   ...
Con TDD en integración- Demasiado tiempo hasta llegar a “lucesverdes”- No baby steps but at least safe steps.- No caigas e...
Arquitecturas que emergen        con Spring
Arquitectura con Spring                                          Entidades                                                ...
Arquitectura con Spring@Controller      @Service      @Repository                                               Entidades ...
¡¡Cuidado con los           ¡¡Cuidado con los          Modelos anémicos!!          Modelos anémicos!!                     ...
¿Estamos utilizando¿Estamos utilizando  la orientación a   la orientación a       objetos?       objetos?                 ...
¡¡Estamos haciendo JABOL!!  Programamos en JAva   como si fuera coBOL
¡¡Estamos haciendo JABOL!!  Programamos en JAva   como si fuera coBOL   Estructuras de datos             +     procedimien...
Arquitectura con Spring- Las propias anotaciones de Spring nosguían al JABOL.(@Service)- Algunas anotaciones inducen a lac...
A tener en cuenta- Es posible hacer P.O.O con Spring.
A tener en cuenta- Es posible hacer P.O.O con Spring.- Es fácil caer en las tentaciones de los              frameworks.
A tener en cuenta- Es posible hacer P.O.O con Spring.- Es fácil caer en las tentaciones de los              frameworks.- E...
Probando la persistencia
Opciones- Test Unitarios → Simular el API de BD- Test Integración → Contra una base dedatos
Test Unitarios- Simulación API de BD (JDBC)
Test Unitarios- Simulación API de BD (JDBC)  + Mocks de PreparedStatement, etc
Test Unitarios- Simulación API de BD (JDBC)+ Mocks de PreparedStatement, etcPreparedStatement statement = mock(PreparedSta...
Test Unitarios- Simulación API de BD (JDBC)- DBUnit (dbunit.org)        ¿¿Realmente son pruebas unitarias??
Test de Integración- Base de datos real    + Commit    + Rollback de los test- Base de datos en memoria
Test de Integración: BD Real- Spring permite la creación de conexiones directas conBD sin Pool de conexiones.- Spring 3 pe...
Test de Integración: BD Real
Test de Integración: BD RealPodemos conseguir que nuestros test no modifiquen laBD mediante un rollback al finalizar los t...
Test de Integración: BD RealVentajas- Pruebas similares al entorno final.- Scripts de base de datos son similares alentorn...
Test de Integración: BD RealDesventajas- Test lentos.- Necesidad de tener la BD instalada.
Test de Integración: BD En MemoriaSpring 3 permite la creación de bases de datos enmemoria:
Test de Integración: BD En MemoriaVentajas- Test muy rápidos.- No es necesario instalar ninguna base dedatos.
Test de Integración: BD RealDesventajas- No es la base de datos real.- Scripts de base de datos diferentes.
Test de Integración  ¿Cuál utilizar?
¡¡La intención es lo¡¡La intención es lo   que cuenta!!    que cuenta!!                       Enrique Amodeo Rubio
Todo depende de loTodo depende de loque quieras probar que quieras probar                      Enrique Amodeo Rubio
Conclusiones- Utiliza lo que necesites en cada momento.- No supedites tu arquitectura a unframework.- No seas talibán, tod...
Preguntas
Podéis encontrarme en:            @ialcazar            farmerdev.com
Próxima SlideShare
Cargando en…5
×

XPWEEK - Testing con Spring 3

2.715 visualizaciones

Publicado el

Mi charla en la XPWeek sobre como hacer testing con frameworks. Especial atención a Spring 3.0

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
2.715
En SlideShare
0
De insertados
0
Número de insertados
77
Acciones
Compartido
0
Descargas
37
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

XPWEEK - Testing con Spring 3

  1. 1. Testing con Spring 3Because seeds grow in the
  2. 2. Soy Israel Alcázar Aprendiz de todo, maestro de nada.@ialcazarfarmerdev.com Me gusta trabajar con máquinas: - Developer Me gusta trabajar con personas: - Scrum Master - Mentor, Coach y Trainer
  3. 3. Empecemos....¡¡¡Con Pasión!!!
  4. 4. Empecemos por el principio
  5. 5. Para qué sirve Spring Contenedor ligero de objetos planos (POJO) Permite inversión de control e inyección dedependencias. Factoría de objetos. Integración con las APIs Java masimportantes.
  6. 6. ¿Por qué testing con Spring?Es Java. Framework mas utilizado en el desarrollo deaplicaciones JEE.Permite POJOs → Orientado a pruebasIntegración con casi cualquier tecnología.
  7. 7. Un poco de historia2004: Spring 1.02006: Spring 2.02007: Spring 2.52010: Spring 3.02011: Spring 3.1
  8. 8. Arquitectura
  9. 9. Arquitectura
  10. 10. Arquitectura
  11. 11. ¿Qué tipos de test puedo realizar? Test Unitarios Test de Integración
  12. 12. ¿Qué tipos de test puedo realizar? ¿Estás seguro joven Padawan? Test Unitarios Test de Integración Robert C. Martin (Uncle Bob)
  13. 13. ¿Qué tipos de test puedo realizar?Un test unitario debe ser: Rápido Independiente del entorno Repetible en el tiempo Validarse por si mismo Robert C. Martin (Uncle Bob) Con TDD siempre antes del código.
  14. 14. ¿Qué es TDD?Test Driven DevelopmentDesarrollo Digido por Pruebas
  15. 15. ¿Qué es TDD?Diseño Dirigido por Ejemplos(Examples Driven Design)
  16. 16. Los pasos de TDD:
  17. 17. Los pasos de TDD:
  18. 18. Los pasos de TDD:
  19. 19. Estructura de una aplicación con Spring
  20. 20. Estructura de una aplicación Persistencia PersistenciaVista Controllers BD Lógica Sistemas Negocio Periféricos
  21. 21. Estructura de una aplicación Persistencia PersistenciaVista Controllers BD Lógica Sistemas Negocio Periféricos ¡¡Dos mundos!!
  22. 22. Estructura de una aplicación Persistencia PersistenciaVista Controllers BD Lógica Sistemas Negocio Periféricos ¡¡Tres mundos!!
  23. 23. ¿Por dónde empiezo?
  24. 24. Cogiendo flow...Funcionalidad Controller De fuera hacia dentro...
  25. 25. Cogiendo flow...Funcionalidad Controller Tests Unitarios
  26. 26. Cogiendo flow...Funcionalidad Controller Colaboradores son dobles
  27. 27. Cogiendo flow...Funcionalidad Controller Permite centrarse en la colaboración entre objetos
  28. 28. Cogiendo flow...Funcionalidad Controller Utilizamos...
  29. 29. Cogiendo flow...Funcionalidad Controller Utilizamos...
  30. 30. Cogiendo flow...La inicialización:
  31. 31. Cogiendo flow...La inicialización: Inyección del Inyección del colaborador colaborador
  32. 32. Cogiendo flow...El método de test:
  33. 33. Cogiendo flow...El método de test: Comportamiento Comportamiento de de los dobles los dobles
  34. 34. Cogiendo flow...El método de test: Lo que estamos Lo que estamos probando probando
  35. 35. Cogiendo flow...El método de test: Verificación del Verificación del comportamiento comportamiento
  36. 36. Cogiendo flow...El controller: Es una clase plana
  37. 37. ¿Y ahora qué?
  38. 38. Creando la lógica de negocioFuncionalidad Controller Lógica de Negocio Tests Unitarios
  39. 39. Creando la lógica de negocio La Lógica de negocio:
  40. 40. Creando la lógica de negocio La Lógica de negocio: Colaboradores Colaboradores
  41. 41. Creando la lógica de negocio Comportamiento Comportamiento La Lógica de negocio: de de Colaboradores Colaboradores
  42. 42. Creando la lógica de negocio La Lógica de negocio:erificación Verificación V
  43. 43. Creando la lógica de negocio El código El código resultante resultante
  44. 44. ¿Dónde está Spring?
  45. 45. Ten en cuentaSpring no aparece en los test unitarios
  46. 46. Ten en cuenta Spring no aparece en los test unitariosDiseña tus clases sin pensar en frameworks
  47. 47. Ten en cuenta Spring no aparece en los test unitariosDiseña tus clases sin pensar en frameworks TDD como herramienta de diseño.
  48. 48. Ya tenemos los test unitarios. ¿Qué hago?
  49. 49. Test de Integración Persistencia PersistenciaVista BD Controllers Lógica Sistemas Negocio Periféricos Unamos todas las piezas
  50. 50. Test de Integración Persistencia PersistenciaControllers BD Lógica Sistemas Negocio Periféricos Unamos todas las piezas
  51. 51. Ahora con SpringEs el momento de utilizar Spring como pegamento
  52. 52. Ahora con Spring Un ejemplo
  53. 53. Ahora con SpringAparecen: @Service @Inject @Inject @Component
  54. 54. Ahora con Spring ¡¡He perdido mi flow!!
  55. 55. Ahora con Spring¡¡Es fácil caer en la anarquía y el caos en los test de integración!! @Service @Repository @Inject @Component
  56. 56. Recuerda el poder Recuerda el poder del TDD del TDDKent Beck
  57. 57. Consejo No abandones el TDD en los test deintegración, deja que estos te guíen...
  58. 58. ¿Qué pasa con ¿Qué pasa con los baby steps? los baby steps? José Manuel Beashttp://blog.jmbeas.es/2011/07/25/pasito-a-pasito/
  59. 59. Con TDD en integración- Demasiado tiempo hasta llegar a “lucesverdes”- No baby steps but at least safe steps.- No caigas en la anarquía, que te guien lostest.
  60. 60. Arquitecturas que emergen con Spring
  61. 61. Arquitectura con Spring Entidades BD ORMS:Controllers Servicios de - JPA negocio DAOs - Hibernate - Ibatis Persistencia
  62. 62. Arquitectura con Spring@Controller @Service @Repository Entidades BD ORMS:Controllers Servicios de - JPA negocio DAOs - Hibernate - Ibatis Añadidas Anotaciones Persistencia
  63. 63. ¡¡Cuidado con los ¡¡Cuidado con los Modelos anémicos!! Modelos anémicos!! Martin Fowlerhttp://martinfowler.com/bliki/AnemicDomainModel.html
  64. 64. ¿Estamos utilizando¿Estamos utilizando la orientación a la orientación a objetos? objetos? Martin Fowler
  65. 65. ¡¡Estamos haciendo JABOL!! Programamos en JAva como si fuera coBOL
  66. 66. ¡¡Estamos haciendo JABOL!! Programamos en JAva como si fuera coBOL Estructuras de datos + procedimientos
  67. 67. Arquitectura con Spring- Las propias anotaciones de Spring nosguían al JABOL.(@Service)- Algunas anotaciones inducen a laconfusión (@Repository)
  68. 68. A tener en cuenta- Es posible hacer P.O.O con Spring.
  69. 69. A tener en cuenta- Es posible hacer P.O.O con Spring.- Es fácil caer en las tentaciones de los frameworks.
  70. 70. A tener en cuenta- Es posible hacer P.O.O con Spring.- Es fácil caer en las tentaciones de los frameworks.- Es posible hacer DDD (Domain Driven Design) con Spring
  71. 71. Probando la persistencia
  72. 72. Opciones- Test Unitarios → Simular el API de BD- Test Integración → Contra una base dedatos
  73. 73. Test Unitarios- Simulación API de BD (JDBC)
  74. 74. Test Unitarios- Simulación API de BD (JDBC) + Mocks de PreparedStatement, etc
  75. 75. Test Unitarios- Simulación API de BD (JDBC)+ Mocks de PreparedStatement, etcPreparedStatement statement = mock(PreparedStatement.class)when(statement.exequteQuery(query)).thenReturn(mock(ResultSet.class))
  76. 76. Test Unitarios- Simulación API de BD (JDBC)- DBUnit (dbunit.org) ¿¿Realmente son pruebas unitarias??
  77. 77. Test de Integración- Base de datos real + Commit + Rollback de los test- Base de datos en memoria
  78. 78. Test de Integración: BD Real- Spring permite la creación de conexiones directas conBD sin Pool de conexiones.- Spring 3 permite añadir scripts SQL directamente.
  79. 79. Test de Integración: BD Real
  80. 80. Test de Integración: BD RealPodemos conseguir que nuestros test no modifiquen laBD mediante un rollback al finalizar los test:
  81. 81. Test de Integración: BD RealVentajas- Pruebas similares al entorno final.- Scripts de base de datos son similares alentorno final.
  82. 82. Test de Integración: BD RealDesventajas- Test lentos.- Necesidad de tener la BD instalada.
  83. 83. Test de Integración: BD En MemoriaSpring 3 permite la creación de bases de datos enmemoria:
  84. 84. Test de Integración: BD En MemoriaVentajas- Test muy rápidos.- No es necesario instalar ninguna base dedatos.
  85. 85. Test de Integración: BD RealDesventajas- No es la base de datos real.- Scripts de base de datos diferentes.
  86. 86. Test de Integración ¿Cuál utilizar?
  87. 87. ¡¡La intención es lo¡¡La intención es lo que cuenta!! que cuenta!! Enrique Amodeo Rubio
  88. 88. Todo depende de loTodo depende de loque quieras probar que quieras probar Enrique Amodeo Rubio
  89. 89. Conclusiones- Utiliza lo que necesites en cada momento.- No supedites tu arquitectura a unframework.- No seas talibán, todo es bueno y malo a lavez.
  90. 90. Preguntas
  91. 91. Podéis encontrarme en: @ialcazar farmerdev.com

×