Tdd With Mockito

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Tdd With Mockito - Presentation Transcript

    1. Test Driven Development con Filippo Diotalevi Java User Group Milano filippo@diotalevi.com Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    2. AGENDA TDD All code is guilty until proven innocent Hello, I’m a Mock Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    3. Test Driven Development TDD All code is guilty until proven innocent Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    4. Test Driven Development ? Come realizziamo il nostro software Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    5. Test Driven Development ? Il mio codice funziona? Come funziona il mio codice? Il mio codice è manutenibile (da altri)? Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    6. Test Driven Development Approccio alternativo (TDD) Non scrivere codice senza che esista un test automatico (che fallisca) Elimina le duplicazioni Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    7. Ritmo Rosso Test non compilano, o falliscono Verde OK! Rifattorizza Eliminiamo duplicazioni e compromessi Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    8. Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    9. Mock Object ...è un oggetto che simula, in un modo controllato, il comportamento di un oggetto “reale” Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    10. Mock Object: perché? Non è possible utilizzare l’oggetto reale in unit test perchè: ... necessita di un container/stato ... richiede l’integrazione con sistemi esterni (non disponibili in sviluppo) ... non esiste ancora! Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    11. Mock Object DumbHttpRequestMock implements HttpServletRequest public class { public String getAuthType() { return null; } public String getContextPath() { return null; Il più semplice } degli esempi public Cookie[] getCookies() { return null; } (aka Fake class) public long getDateHeader(String arg0) { return 0; } getHeader(String arg0) { public String return \"MY-HEADER-VALUE\"; } getHeaderNames() { public Enumeration return null; } Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    12. Mock Object Sfortunatamente: ... non sempre abbiamo interfacce chiaramente definite ... è spesso complicato o lungo creare delle implementazioni fake ... è poco flessibile Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    13. Mock Objects: caratteristiche Il “Mock Object” ideale: ... può essere definito dinamicamente ... permette di creare, velocemente, stub di metodi ... permette di verificare le interazioni con gli altri oggetti Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    14. Mockito http://code.google.com/p/mockito/ Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    15. Mockito: Setup Download mockito-1.6.jar import static org.mockito.Mockito.*; Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    16. Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    17. Mockito: Mock dinamico HttpServletRequest req = mock(HttpServletRequest.class); @Mock HttpServletRequest req; Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    18. Mockito: Verifiche verify(mockOne).add(\"one\"); //verifica l’invocazione //verifica la non-invocazione verify(mockOne, never()).add(\"two\"); //nessuna interazione verifyZeroInteractions(mockTwo, mockThree); //verifica dell’ordine delle invocazioni InOrder inOrder = inOrder(firstMock, secondMock); inOrder.verify(firstMock).add(\"was called first\"); inOrder.verify(secondMock).add(\"was called second\"); Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    19. Mockito: Argument Matchers Default Matchers: when(req.getHeader(anyString()).thenReturn(\"HI!\"); anyBoolean, anyByte, anyChar, anyCollection, anyDouble, anyFloat, anyInt, anyList, anyLong, anyMap, anyObject, anyShort, anyString, argThat Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    20. Mockito: Argument Matchers Custom Matchers: class IsListOfTwoElements extends ArgumentMatcher<List> { public boolean matches(Object list) { return ((List) list).size() == 2; } } List mock = mock(List.class); when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true); Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    21. Mockito: Stub when(req.getHeader(“myheader”)).thenReturn(\"HI!\"); when(req.getSession().thenThrow(new RuntimeException()); when(req.getHeader(“myheader”)).thenAnswer(new Answer<String>() { public String answer(InvocationOnMock invocation) throws Throwable { return (String) invocation.getArguments()[0]; } Stub & Callback } Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    22. Conclusione TDD permette di scrivere codice affidabile e comprensibile Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    23. Conclusione I Mock Objects (e Mockito) permettono di testare in modo completo gli oggetti senza preoccuparsi delle dipendenze da sistemi/ componenti esterni Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009
    24. Riferimenti Wikipedia, TDD, http://en.wikipedia.org/wiki/Test-driven_development Test Driven Development: By Example, Kent Beck, Addison-Wesley Longman, 20 Wikipedia, Mock objects, http://en.wikipedia.org/wiki/Mock_object Martin Fowler, Mocks aren’t stubs, http://martinfowler.com/articles/mocksArentStubs.html Filippo Diotalevi - filippo@diotalevi.com – Jug Milano Javaday Roma III Edizione – 24 gennaio 2009

    + Filippo DiotaleviFilippo Diotalevi, 10 months ago

    custom

    863 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 863
      • 863 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 5
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories