Professional Documents
Culture Documents
Tipos de test :
Test funcionales o aceptacin Test que garantiza que el software hace lo que desea el usuario. Test de integracin Test que garantizan que el software se integra correctamente con los recursos externos: BBDD, LDAP, API externas, etc. Test de rendimiento Test que garantizan el rendimiento del software en las situaciones requeridas por el usuario. Test unitarios Test que prueba la correcta funcionalidad de las clases y garantizan la mantenibilidad del software.
2
Test unitarios
Tipos de test :
Frente
Test de rendimiento
Frente
Frente
Software
Test de aceptacin
Frente
Test de integracin
Test unitarios
Test unitarios
Test unitarios
Test Unitarios:
Test unitarios
Test Unitarios:
Test unitarios
Test Unitarios:
Test unitarios
Test Unitarios:
Estructura de un test
- Preparar y configurar el estado necesario para realizar el test - Realizar la llamada al mtodo que se quiere testear - Verificar el resultado obtenido
Arrange
Act
Assert
8
Test unitarios
Test Unitarios:
Test unitarios
Test Unitarios:
Qu testear?
Right-BICEP
- Right: Si el cdigo se ejecuta correctamente, cmo lo s? - Boundary: Probar condiciones lmite, muchos bugs viven all - Inverse: Testear la lgica inversa si es posible - Cross-check: Cotejar los resultados utilizando diferentes medios - Error conditions: Forzar las situaciones de error - Performance: Probar las caractersticas de rendimiento si requiere
10
Test unitarios
Ejemplo de clase :
11
Test unitarios
Ejemplo de test:
12
Test unitarios
Ejemplo de test:
13
Dobles de prueba
Plan TDD
14
Dobles de prueba
Plan TDD
15
Dobles de prueba
Plan TDD
16
Dobles de prueba
Plan TDD
Stubs
Un stub es un objeto que programamos para que nos devuelva lo que deseemos y poder probar cmo reacciona nuestro cdigo ante los distintos valores de respuesta del colaborador en cuestin
17
Dobles de prueba
Plan TDD
Producto unProductoStub = mock(Producto.class); Producto otroProductoStub = mock(Producto.class); PasarelaDePago pasarelaDePagoStub = mock(PasarelaDePago.class); Compra compra = new Compra(pasarelaDePagoStub);
@Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_la_puedo_confirmar() { when(unProductoStub.precio()).thenReturn(50); when(otroProductoStub.precio()).thenReturn(25); when(pasarelaDePagoStub.tieneElUsuarioFondosPorValorDe(75)).thenReturn(true); compra.anadir(unProductoStub); compra.anadir(otroProductoStub); assertTrue(compra.confirmar()); } }
18
Dobles de prueba
Plan TDD
public class Compra { private final List<Producto> productos = new ArrayList(); private final PasarelaDePago pasarelaDePago; public Compra(PasarelaDePago pasarelaDePagoStub) { this.pasarelaDePago = pasarelaDePagoStub; } public void anadir(Producto producto) { productos.add(producto); } public int precio() { int precioTotalCompra = 0; for (Producto producto : productos) {
19
Dobles de prueba
Plan TDD
Mocks
Un mock es un doble que nos sirve para verificar salidas indirectas del objeto que estamos probando
20
Dobles de prueba
Plan TDD
Dobles de prueba
Plan TDD
boolean confirmar() {
22
Dobles de prueba
Plan TDD
Spies
Al igual que los mocks, los spies sirven para hacer comprobaciones sobre salidas indirectas. La diferencia es que con un Spy lo que hacemos es despus de ejecutar el mtodo a probar verificar si sobre el doble se ha invocado a tal o cual mtodo
23
Dobles de prueba
Plan TDD
24
Dobles de prueba
Plan TDD
25
Dobles de prueba
Plan TDD
Fakes
Un fake es una implementacin falsa de un determinado interfaz, ms simple normalmente, con el objetivo de hacer que el test se pueda ejecutar ms rpido o sin dependencias de un sistema externo. Por ejemplo un fake de un objeto que acceda a la persistencia podra ser una implementacin en memoria del mismo objeto.
26
Dobles de prueba
Plan TDD
Dummy
Un dummy es simplemente cuando el objeto a probar tiene algn colaborador que no vamos a utilizar en este test, entonces se le pasa un dummy que puede ser simplemente un nulo
27
Dobles de prueba
Plan TDD
Webs de referencia
Mock Sucks http://www.testingtv.com/2010/12/20/mocks-suck-and-what-to-do-about-it/ Java Mock Frameworks Comparison http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Diferencias entre mocks y stubs http://theproc.es/2009/5/21/658/diferencias-entre-mocks-y-stubs Escribiendo mejores tests http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejore s_test_iii_mocking
28
Test unitarios
Agenda :
Tipos de test Test unitarios Mocks y Stubs Tareas / etxeko-lanak
29
Test unitarios
Tarea:
Descargar proyecto encryptor (//dominio/proyectos/dnt) Realizar test unitarios de los mtodos pblicos
30
Test unitarios
Tarea :
Crear un tarea/job en el servidor CI Jenkins http://192.168.0.21:9090
31
Test unitarios
Tarea :
Empezar a crear test unitarios en los proyectos Programar la ejecucin de los test en Jenkins CI
32
Gracias!!
Ruben Egiluz
Software Engineer
Ivan Rodriguez
Software Engineer
Donewtech Solutions, S.L. Zubiberri Bidea 31 Edificio Urumea 20018 Donostia San Sebastin +34 943 223 031
www.donewtech.com