• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Test unitarios
 

Test unitarios

on

  • 1,919 views

Introduction to software unit testing and the differents type of mocks

Introduction to software unit testing and the differents type of mocks

Statistics

Views

Total Views
1,919
Views on SlideShare
1,919
Embed Views
0

Actions

Likes
0
Downloads
43
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Test unitarios Test unitarios Presentation Transcript

    • Test Unitarios Diseño al cubo : Plan TDD Donostia, 06/05/2011
    • Plan TDD Test unitarios
      • Plan TDD Donewtech:
        • Formación test unitarios
        • Formación TDD
        • Dojo newtech
        • Coaching Carlos Blé a primeros de octubre
    • Formación test unitarios Test unitarios
      • Agenda :
        • Tipos de test
        • Test unitarios
        • Mocks y Stubs
        • Tareas / etxeko-lanak
    • Formación test unitarios Test unitarios
      • Tipos de test :
        • Test funcionales o aceptación
          • Test que garantiza que el software hace lo que desea el usuario.
        • Test de integración
          • 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.
    • Formación test unitarios Test unitarios
      • Tipos de test :
      Frente Frente Frente Frente Test de aceptación Test de integración Test de rendimiento Test unitarios Software
    • Formación test unitarios Test unitarios
      • Agenda :
        • Tipos de test
        • Test unitarios
        • Mocks y Stubs
        • Tareas / etxeko-lanak
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Qué es una prueba unitaria? Una prueba unitaria es una pieza de código escrito por un desarrollador que prueba una pequeña área específica de la funcionalidad del código
    • Formación test unitarios Test unitarios
      • Test Unitarios:
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Escusas para no hacer test unitario - Cuesta mucho tiempo hacer los test - Cuesta mucho tiempo ejecutar los test - No es mi trabajo testear mi código - Ya compila... no vale? - Cuesta mucho tiempo hacer los test - A mi me pagan por escribir código, no por escribir tests
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Beneficios de hacer test unitarios - Mejora el diseño de la implementación - Reduce el tiempo invertido debuggeando - Se gana “seguridad” en los cambios - Te hace la vida más fácil y tranquila - Ayuda a documentar el código - Se pone el código en situaciones extremas
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Estructura de un test - Preparar y configurar el estado necesario para realizar el test - Realizar la llamada al método que se quiere testear - Verificar el resultado obtenido A rrange A ct A ssert
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Propiedades de un buen test - A utomatic: los tests se deben ejecutar automáticamente - T horough: exaustivos, se prueba todo que sea sensible al fallo - R epeatable: ejecutar el test una y otra vez, con el mismo resultado - I ndependent: Independiente entre los otros test y del entorno - P rofessional: Debe ser código como si fuera producción
    • Formación test unitarios Test unitarios
      • Test Unitarios:
      Qué testear? - Right : Si el código se ejecuta correctamente, ¿cómo lo sé? Right-BICEP - B oundary : Probar condiciones límite, muchos “bugs” viven allí - I nverse : Testear la lógica inversa si es posible - C ross-check : Cotejar los resultados utilizando diferentes medios - E rror conditions : Forzar las situaciones de error - P erformance : Probar las características de rendimiento si requiere
    • Formación test unitarios Test unitarios Ejemplo de clase :
    • Formación test unitarios Test unitarios Ejemplo de test:
    • Formación test unitarios Test unitarios Ejemplo de test:
    • Formación test unitarios Test unitarios
      • Agenda :
        • Tipos de test
        • Test unitarios
        • Mocks y Stubs
        • Tareas / etxeko-lanak
    • Plan TDD Dobles de prueba Un doble de prueba es un objeto que no es el real y que usamos para poder probar una funcionalidad aislándonos del resto de los objetos del sistema ¿Qué son los doble de prueba?
    • Plan TDD Tipos de doble de prueba (o roles)
      • Stub
      • Mock
      • Spy
      • Fake
      • dummy
      Dobles de prueba
    • Plan TDD Dobles de prueba Frameworks para trabajar con dobles de prueba
      • Java
        • mockito
        • easyMock
        • Jmock
      • JavaScript
        • JsTestDriver
          • Jsmockito
          • JsHamcrest
        • Sinon.JS
        • Qunit
    • Plan TDD Dobles de prueba Un stub es un objeto que programamos para que nos devuelva lo que nos de la gana y poder probar cómo reacciona nuestro código ante los distintos valores de respuesta del colaborador en cuestión Stubs
    • Plan TDD Dobles de prueba Ejemplo de stub (usando mockito) public class CompraTest { 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()); } }
    • 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) {
      • precioTotalCompra+=producto.precio();
      • }
      • return precioTotalCompra;
      • }
      • boolean confirmar() {
      • return pasarelaDePago.tieneElUsuarioFondosPorValorDe(precio());
      • }
      • }
      Dobles de prueba
    • Plan TDD Dobles de prueba Mocks Un mock es un doble que nos sirve para verificar salidas indirectas del objeto que estamos probando
    • Plan TDD Dobles de prueba Ejemplo de mock (usando easyMock) public class CompraTestMocks { PasarelaDePago pasarelaDePagoMock = createMock(PasarelaDePago.class); Producto unProductoStub = createMock(Producto.class); Compra compra = new Compra(pasarelaDePagoMock); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { expect (unProductoStub.precio()). andReturn (50); expect (pasarelaDePagoMock.tieneElUsuarioFondosPorValorDe(50)). andReturn (true); pasarelaDePagoMock.cobrar(50); replay (pasarelaDePagoMock); replay (unProductoStub); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoMock); } }
    • Plan TDD boolean confirmar() { int elPrecioDeLaCompra = precio(); boolean tieneElUsuarioFondos = pasarelaDePago.tieneElUsuarioFondosPorValorDe(elPrecioDeLaCompra); if (tieneElUsuarioFondos){ pasarelaDePago.cobrar(elPrecioDeLaCompra); } return tieneElUsuarioFondos; } Dobles de prueba
    • Plan TDD Dobles de prueba 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 después de ejecutar el método a probar verificar si sobre el doble se ha invocado a tal o cual método
    • Plan TDD Dobles de prueba Ejemplo de Spy (usando mockito) public class CompraTestSpies { PasarelaDePago pasarelaDePagoSpy = mock (PasarelaDePago.class); Producto unProductoStub = mock (Producto.class); Compra compra = new Compra(pasarelaDePagoSpy); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { when (unProductoStub.precio()). thenReturn (50); when (pasarelaDePagoSpy.tieneElUsuarioFondosPorValorDe(50)). thenReturn (false); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoSpy).cobrar(50); } }
    • Plan TDD Dobles de prueba Entonces ¿Mocks o Spies?
    • Plan TDD Dobles de prueba Fakes Un fake es una implementación falsa de un determinado interfaz, más simple normalmente, con el objetivo de hacer que el test se pueda ejecutar más rápido o sin dependencias de un sistema externo. Por ejemplo un fake de un objeto que acceda a la persistencia podría ser una implementación en memoria del mismo objeto.
    • Plan TDD Dobles de prueba Dummy Un dummy es simplemente cuando el objeto a probar tiene algún colaborador que no vamos a utilizar en este test, entonces se le pasa un dummy que puede ser simplemente un nulo
    • 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_mejores_test_iii_mocking Dobles de prueba
    • Formación test unitarios Test unitarios
      • Agenda :
        • Tipos de test
        • Test unitarios
        • Mocks y Stubs
        • Tareas / etxeko-lanak
    • Formación test unitarios Test unitarios
      • Tarea:
        • Descargar proyecto “ encryptor ” (//dominio/proyectos/dnt)
        • Realizar test unitarios de los métodos públicos
    • Formación test unitarios Test unitarios
      • Tarea :
        • Crear un tarea/job en el servidor CI Jenkins
        • http://192.168.0.21:9090
    • Formación test unitarios Test unitarios
      • Tarea :
        • Empezar a crear test unitarios en los proyectos
        • Programar la ejecución de los test en Jenkins CI
    • Formación test unitarios Test unitarios ¡Nos vemos en 15 días!
    • Ruben Egiluz Software Engineer Ivan Rodriguez Software Engineer Donewtech Solutions, S.L. Zubiberri Bidea 31 Edificio Urumea 20018 Donostia – San Sebastián +34 943 223 031 www.donewtech.com ¡¡Gracias!!