xpweek - testing con spring 3

91
Testing con Spring 3 Because seeds grow in the

Upload: israel-alcazar

Post on 13-Jan-2015

2.287 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: XPWEEK - Testing con Spring 3

Testing con Spring 3

Because seeds grow in the

Page 2: XPWEEK - Testing con Spring 3

Soy Israel AlcázarAprendiz de todo, maestro de nada.

Me gusta trabajar con máquinas:- Developer

Me gusta trabajar con personas:- Scrum Master- Mentor, Coach y Trainer

@ialcazar

farmerdev.com

Page 3: XPWEEK - Testing con Spring 3

Empecemos....

¡¡¡Con Pasión!!!

Page 4: XPWEEK - Testing con Spring 3

Empecemos por el principio

Page 5: XPWEEK - Testing con Spring 3

Para qué sirve Spring

Contenedor ligero de objetos planos (POJO)

Permite inversión de control e inyección de dependencias.

Factoría de objetos.

Integración con las APIs Java mas importantes.

Page 6: XPWEEK - Testing con Spring 3

¿Por qué testing con Spring?

Es Java.

Framework mas utilizado en el desarrollo de aplicaciones JEE.

Permite POJOs → Orientado a pruebas

Integración con casi cualquier tecnología.

Page 7: XPWEEK - Testing con Spring 3

Un poco de historia

2004: Spring 1.0 2006: Spring 2.0 2007: Spring 2.5 2010: Spring 3.0 2011: Spring 3.1

Page 8: XPWEEK - Testing con Spring 3

Arquitectura

Page 9: XPWEEK - Testing con Spring 3

Arquitectura

Page 10: XPWEEK - Testing con Spring 3

Arquitectura

Page 11: XPWEEK - Testing con Spring 3

¿Qué tipos de test puedo realizar?

Test Unitarios

Test de Integración

Page 12: XPWEEK - Testing con Spring 3

¿Qué tipos de test puedo realizar?

Test Unitarios

Test de Integración

¿Estás seguro joven Padawan?

Robert C. Martin (Uncle Bob)

Page 13: XPWEEK - Testing con Spring 3

¿Qué tipos de test puedo realizar?

Un test unitario debe ser:

Rápido Independiente del entorno Repetible en el tiempo

Validarse por si mismo

Con TDD siempre antes del código. Robert C. Martin (Uncle Bob)

Page 14: XPWEEK - Testing con Spring 3

¿Qué es TDD?

Test Driven Development

Desarrollo Digido por Pruebas

Page 15: XPWEEK - Testing con Spring 3

¿Qué es TDD?

Diseño Dirigido por Ejemplos

(Examples Driven Design)

Page 16: XPWEEK - Testing con Spring 3

Los pasos de TDD:

Page 17: XPWEEK - Testing con Spring 3

Los pasos de TDD:

Page 18: XPWEEK - Testing con Spring 3

Los pasos de TDD:

Page 19: XPWEEK - Testing con Spring 3

Estructura de una aplicación con Spring

Page 20: XPWEEK - Testing con Spring 3

Estructura de una aplicación

PersistenciaPersistencia

Vista Controllers Lógica Negocio

Sistemas Periféricos

BD

Page 21: XPWEEK - Testing con Spring 3

Estructura de una aplicación

PersistenciaPersistencia

Vista Controllers Lógica Negocio

Sistemas Periféricos

BD

¡¡Dos mundos!!

Page 22: XPWEEK - Testing con Spring 3

Estructura de una aplicación

PersistenciaPersistencia

Vista Controllers Lógica Negocio

Sistemas Periféricos

BD

¡¡Tres mundos!!

Page 23: XPWEEK - Testing con Spring 3

¿Por dónde empiezo?

Page 24: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

De fuera hacia dentro...

Page 25: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

Tests Unitarios

Page 26: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

Colaboradores son dobles

Page 27: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

Permite centrarse en la colaboración entre objetos

Page 28: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

Utilizamos...

Page 29: XPWEEK - Testing con Spring 3

Cogiendo flow...

FuncionalidadController

Utilizamos...

Page 30: XPWEEK - Testing con Spring 3

Cogiendo flow...

La inicialización:

Page 31: XPWEEK - Testing con Spring 3

Cogiendo flow...

La inicialización:

Inyección del colaborador

Inyección del colaborador

Page 32: XPWEEK - Testing con Spring 3

Cogiendo flow...

El método de test:

Page 33: XPWEEK - Testing con Spring 3

Cogiendo flow...

El método de test:

Comportamiento de

los dobles

Comportamiento de

los dobles

Page 34: XPWEEK - Testing con Spring 3

Cogiendo flow...

El método de test:

Lo que estamosprobando

Lo que estamosprobando

Page 35: XPWEEK - Testing con Spring 3

Cogiendo flow...

El método de test:

Verificación del comportamientoVerificación del comportamiento

Page 36: XPWEEK - Testing con Spring 3

Cogiendo flow...

El controller: Es una clase plana

Page 37: XPWEEK - Testing con Spring 3

¿Y ahora qué?

Page 38: XPWEEK - Testing con Spring 3

Creando la lógica de negocio

FuncionalidadController

Tests Unitarios

Lógica de Negocio

Page 39: XPWEEK - Testing con Spring 3

Creando la lógica de negocio

La Lógica de negocio:

Page 40: XPWEEK - Testing con Spring 3

Creando la lógica de negocio

La Lógica de negocio:ColaboradoresColaboradores

Page 41: XPWEEK - Testing con Spring 3

Creando la lógica de negocio

La Lógica de negocio:Comportamiento

de Colaboradores

Comportamiento de

Colaboradores

Page 42: XPWEEK - Testing con Spring 3

Creando la lógica de negocio

La Lógica de negocio:VerificaciónVerificación

Page 43: XPWEEK - Testing con Spring 3

El código resultanteEl código resultante

Creando la lógica de negocio

Page 44: XPWEEK - Testing con Spring 3

¿Dónde está Spring?

Page 45: XPWEEK - Testing con Spring 3

Ten en cuenta

Spring no aparece en los test unitarios

Page 46: XPWEEK - Testing con Spring 3

Ten en cuenta

Spring no aparece en los test unitarios

Diseña tus clases sin pensar en frameworks

Page 47: XPWEEK - Testing con Spring 3

Ten en cuenta

Spring no aparece en los test unitarios

Diseña tus clases sin pensar en frameworks

TDD como herramienta de diseño.

Page 48: XPWEEK - Testing con Spring 3

Ya tenemos los test unitarios.

¿Qué hago?

Page 49: XPWEEK - Testing con Spring 3

Test de Integración

PersistenciaPersistencia

Vista Controllers Lógica Negocio

Sistemas Periféricos

BD

Unamos todas las piezas

Page 50: XPWEEK - Testing con Spring 3

Test de Integración

PersistenciaPersistencia

Controllers Lógica Negocio

Sistemas Periféricos

BD

Unamos todas las piezas

Page 51: XPWEEK - Testing con Spring 3

Ahora con Spring

Es el momento de utilizar Spring como pegamento

Page 52: XPWEEK - Testing con Spring 3

Ahora con Spring

Un ejemplo

Page 53: XPWEEK - Testing con Spring 3

Ahora con Spring

Aparecen:

@Service

@Component@Inject

@Inject

Page 54: XPWEEK - Testing con Spring 3

Ahora con Spring

¡¡He perdido mi flow!!

Page 55: XPWEEK - Testing con Spring 3

Ahora con Spring

¡¡Es fácil caer en la anarquía y el caos en los test de integración!!

@Service

@Component

@Inject@Repository

Page 56: XPWEEK - Testing con Spring 3

Recuerda el poder del TDD

Recuerda el poder del TDD

Kent Beck

Page 57: XPWEEK - Testing con Spring 3

Consejo

No abandones el TDD en los test de integración, deja que estos te guíen...

Page 58: XPWEEK - Testing con Spring 3

¿Qué pasa con los baby steps?¿Qué pasa con los baby steps?

José Manuel Beas

http://blog.jmbeas.es/2011/07/25/pasito-a-pasito/

Page 59: XPWEEK - Testing con Spring 3

Con TDD en integración

- Demasiado tiempo hasta llegar a “luces verdes”

- No baby steps but at least safe steps.

- No caigas en la anarquía, que te guien los test.

Page 60: XPWEEK - Testing con Spring 3

Arquitecturas que emergen con Spring

Page 61: XPWEEK - Testing con Spring 3

Arquitectura con Spring

Controllers Servicios de negocio

Persistencia

BDORMS:- JPA- Hibernate- Ibatis

Entidades

DAOs

Page 62: XPWEEK - Testing con Spring 3

Arquitectura con Spring

Controllers Servicios de negocio

Persistencia

BDORMS:- JPA- Hibernate- Ibatis

Entidades

DAOs

@Service@Controller @Repository

Añadidas Anotaciones

Page 63: XPWEEK - Testing con Spring 3

¡¡Cuidado con losModelos anémicos!!¡¡Cuidado con los

Modelos anémicos!!

Martin Fowler

http://martinfowler.com/bliki/AnemicDomainModel.html

Page 64: XPWEEK - Testing con Spring 3

¿Estamos utilizandola orientación a

objetos?

¿Estamos utilizandola orientación a

objetos?

Martin Fowler

Page 65: XPWEEK - Testing con Spring 3

¡¡Estamos haciendo JABOL!!

Programamos en JAva como si fuera coBOL

Page 66: XPWEEK - Testing con Spring 3

¡¡Estamos haciendo JABOL!!

Programamos en JAva como si fuera coBOL

Estructuras de datos +

procedimientos

Page 67: XPWEEK - Testing con Spring 3

Arquitectura con Spring

- Las propias anotaciones de Spring nos guían al JABOL.(@Service)

- Algunas anotaciones inducen a la confusión (@Repository)

Page 68: XPWEEK - Testing con Spring 3

A tener en cuenta

- Es posible hacer P.O.O con Spring.

Page 69: XPWEEK - Testing con Spring 3

A tener en cuenta

- Es posible hacer P.O.O con Spring.

- Es fácil caer en las tentaciones de los frameworks.

Page 70: XPWEEK - Testing con Spring 3

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

Page 71: XPWEEK - Testing con Spring 3

Probando la persistencia

Page 72: XPWEEK - Testing con Spring 3

Opciones

- Test Unitarios → Simular el API de BD

- Test Integración → Contra una base de datos

Page 73: XPWEEK - Testing con Spring 3

Test Unitarios

- Simulación API de BD (JDBC)

Page 74: XPWEEK - Testing con Spring 3

Test Unitarios

- Simulación API de BD (JDBC)

+ Mocks de PreparedStatement, etc

Page 75: XPWEEK - Testing con Spring 3

Test Unitarios

- Simulación API de BD (JDBC)

+ Mocks de PreparedStatement, etc

PreparedStatement statement = mock(PreparedStatement.class)

when(statement.exequteQuery(query)).thenReturn(mock(ResultSet.class))

Page 76: XPWEEK - Testing con Spring 3

Test Unitarios

- Simulación API de BD (JDBC)

- DBUnit (dbunit.org)

¿¿Realmente son pruebas unitarias??

Page 77: XPWEEK - Testing con Spring 3

Test de Integración

- Base de datos real+ Commit + Rollback de los test

- Base de datos en memoria

Page 78: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

- Spring permite la creación de conexiones directas con BD sin Pool de conexiones.

- Spring 3 permite añadir scripts SQL directamente.

Page 79: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

Page 80: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

Podemos conseguir que nuestros test no modifiquen la BD mediante un rollback al finalizar los test:

Page 81: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

Ventajas

- Pruebas similares al entorno final.

- Scripts de base de datos son similares al entorno final.

Page 82: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

Desventajas

- Test lentos.

- Necesidad de tener la BD instalada.

Page 83: XPWEEK - Testing con Spring 3

Test de Integración: BD En Memoria

Spring 3 permite la creación de bases de datos en memoria:

Page 84: XPWEEK - Testing con Spring 3

Test de Integración: BD En Memoria

Ventajas

- Test muy rápidos.

- No es necesario instalar ninguna base de datos.

Page 85: XPWEEK - Testing con Spring 3

Test de Integración: BD Real

Desventajas

- No es la base de datos real.

- Scripts de base de datos diferentes.

Page 86: XPWEEK - Testing con Spring 3

Test de Integración

¿Cuál utilizar?

Page 87: XPWEEK - Testing con Spring 3

¡¡La intención es loque cuenta!!

¡¡La intención es loque cuenta!!

Enrique Amodeo Rubio

Page 88: XPWEEK - Testing con Spring 3

Todo depende de loque quieras probar

Todo depende de loque quieras probar

Enrique Amodeo Rubio

Page 89: XPWEEK - Testing con Spring 3

Conclusiones

- Utiliza lo que necesites en cada momento.

- No supedites tu arquitectura a un framework.

- No seas talibán, todo es bueno y malo a la vez.

Page 90: XPWEEK - Testing con Spring 3

Preguntas

Page 91: XPWEEK - Testing con Spring 3

@ialcazar

farmerdev.com

Podéis encontrarme en: