ݺߣ

ݺߣShare a Scribd company logo
Unit Testing e Mock Object Luca S Lopomo
Obiettivi Problematiche dello Unit Testing Unit Testing  e  Mock Object Esempio di utilizzo di  JUnit  con  Mockito
Problematiche dello  Unit Testing Testare il codice e' un problema quando parti del software non lavorano isolatamente. Lo Unit Testing non vuole testare anche le parti che collaborano (es. DBMS, servizi di terzi ecc.) ‏
Def: Unit Testing Un test  NON  e' uno Unit Test se: Dialoga con il DBMS Tocca il filesystem Dialoga con la rete Non è replicabie Dipende dall'ambiente (environment) ‏ Non è isolato
Def: JUnit (il tool) strumento di testing che permette di verificare delle  asserzioni  su metodi. permette di fare  Unit Testing : Testando la classe isolatamente, eventualmente usando dei Mock Object, che simulano il collaboratore. permette di fare  Integration Testing : Testando le interazioni della classe con i collaboratori reali.
Def: Mock Object rimpiazzano i collaboratori. permettono di testare il modulo  isolatamente . implementano un'intefaccia di un collaboratore.
Esempio
Esempio - Intro Supponiamo di avere un'interfaccia  IBookService  che dichiara un metodo per recuperare un  IBook  dato il suo identificativo. Supponiamo di avere un'implementazione per tale interfaccia:  RemoteBookService . Vogliamo implementare e testare un'implementazione triviale  CachedBookService  che decora una  IBookService .
Esempio - Intro CachedBookService  vuole mettere in cache tutte le chiamate seguenti per lo stesso identificativo del libro. Dobbiamo implementare e testare la classe  CachedBookService .
Esempio Class Diagram
Ex.: CacheBookServic‏e
Testing di: getBook()‏ Come testiamo  getBook() ? Dobbiamo  isolare  la classe ==> non vogliamo un collaboratore concreto di  IBookService. Dobbiamo testare le interazioni della classe sotto test con l'oggetto collaboratore: La prima richiesta di un Ibook  deve essere  delegata a  remoteBookService Le richieste seguenti dello stesso devono essere servite dalla  cache  in locale, quindi non devono invocare il collaboratore  “ remoto ” .
Def: Endo Testing Vengono verificati gli output, ma anche le  interazioni di un'unità'  con i collaboratori. “ interaction based testing ”  <>  “ state based testing ”
Def: Mockito Utilizziamo JUnit con un Mock Objects framework:  Mockito. I Mock Object: Simulano  il comportamento dell'interfaccia. Verificano  la sequenza delle chiamate.
Mockito - Vantaggi I Mock Object: non si scrivono, ma si dichiarano. sono sensibili al refactoring ritornano dei valori lanciano eccezioni verificano l'ordine di invocazione verificano il numero di chiamate ad un metodo
Mockito - Lifecycle crea  un Mock Object sull'interfaccia. registra  il comportamento atteso. usiamolo  indirettamente (! -> chi e' sotto test?). verifica  che e' stato usato correttamente.
Testing: testGetBook() - 1
Testing: getBook() - 2
Testing: getBook() - 3
Grazie Domande?

More Related Content

Viewers also liked (15)

PPT
Introduzione al Test Driven Development
Ennio Masi
PPT
Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Elife Brasil
PPT
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Pierfranco Ravotto
PDF
Time Management - Thomas Grones - edizeta
BtheONE Automotive
PPT
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
Istituto nazionale di statistica
PPTX
Beacons in Context
Rex St. John
PDF
Docker introduction
Julien Maitrehenry
PPT
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Progetto Crescere Cooperativa Sociale
PPT
Time management - Luca Foresti
Luca Foresti
PDF
#angels4bologna - SCE 2014
EPOCA
PPT
Time management
CDPV
PDF
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
PPTX
Why Docker
dotCloud
PPTX
Docker introduction
dotCloud
PDF
Docker 101: Introduction to Docker
Docker, Inc.
Introduzione al Test Driven Development
Ennio Masi
Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Elife Brasil
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Pierfranco Ravotto
Time Management - Thomas Grones - edizeta
BtheONE Automotive
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
Istituto nazionale di statistica
Beacons in Context
Rex St. John
Docker introduction
Julien Maitrehenry
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Progetto Crescere Cooperativa Sociale
Time management - Luca Foresti
Luca Foresti
#angels4bologna - SCE 2014
EPOCA
Time management
CDPV
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
Why Docker
dotCloud
Docker introduction
dotCloud
Docker 101: Introduction to Docker
Docker, Inc.

Similar to Unit Testing Mockito (20)

PDF
Presentazione Testing automatizzato
angelolu
PDF
Unit Testing
Giacomo Petronio
PPTX
Unit Test di Gabriele Seroni
Giuneco S.r.l
PPTX
PowerMock TDD User Group Milano
Massimo Groppelli
PDF
Java Unit Testing - JUnit (2)
fgianneschi
PDF
Java Unit Testing - JUnit (1)
fgianneschi
PPTX
Unit testing 2014
Giacomo Petronio
PDF
Java Unit Testing - Introduction
fgianneschi
ODP
Mocking Objects Practices
GrUSP
PDF
Software testing with mocking framework (Android App)
gioacchinolonardo
PPTX
Test double - un'introduzione (PHP)
Carmelantonio Zolfo
PDF
Software Testing & Test Driven Development
Sergio Santoro
PPTX
Dependency injection: the good parts
Massimo Groppelli
PPTX
Test Driven Development @ Xe.Net
Mauro Servienti
PPTX
Unit test
Roberto Cappelletti
PDF
Baby Steps TripServiceKata
Andrea Francia
PDF
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
PDF
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
Davide Cerbo
Presentazione Testing automatizzato
angelolu
Unit Testing
Giacomo Petronio
Unit Test di Gabriele Seroni
Giuneco S.r.l
PowerMock TDD User Group Milano
Massimo Groppelli
Java Unit Testing - JUnit (2)
fgianneschi
Java Unit Testing - JUnit (1)
fgianneschi
Unit testing 2014
Giacomo Petronio
Java Unit Testing - Introduction
fgianneschi
Mocking Objects Practices
GrUSP
Software testing with mocking framework (Android App)
gioacchinolonardo
Test double - un'introduzione (PHP)
Carmelantonio Zolfo
Software Testing & Test Driven Development
Sergio Santoro
Dependency injection: the good parts
Massimo Groppelli
Test Driven Development @ Xe.Net
Mauro Servienti
Baby Steps TripServiceKata
Andrea Francia
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
Davide Cerbo
Ad

Unit Testing Mockito

  • 1. Unit Testing e Mock Object Luca S Lopomo
  • 2. Obiettivi Problematiche dello Unit Testing Unit Testing e Mock Object Esempio di utilizzo di JUnit con Mockito
  • 3. Problematiche dello Unit Testing Testare il codice e' un problema quando parti del software non lavorano isolatamente. Lo Unit Testing non vuole testare anche le parti che collaborano (es. DBMS, servizi di terzi ecc.) ‏
  • 4. Def: Unit Testing Un test NON e' uno Unit Test se: Dialoga con il DBMS Tocca il filesystem Dialoga con la rete Non è replicabie Dipende dall'ambiente (environment) ‏ Non è isolato
  • 5. Def: JUnit (il tool) strumento di testing che permette di verificare delle asserzioni su metodi. permette di fare Unit Testing : Testando la classe isolatamente, eventualmente usando dei Mock Object, che simulano il collaboratore. permette di fare Integration Testing : Testando le interazioni della classe con i collaboratori reali.
  • 6. Def: Mock Object rimpiazzano i collaboratori. permettono di testare il modulo isolatamente . implementano un'intefaccia di un collaboratore.
  • 8. Esempio - Intro Supponiamo di avere un'interfaccia IBookService che dichiara un metodo per recuperare un IBook dato il suo identificativo. Supponiamo di avere un'implementazione per tale interfaccia: RemoteBookService . Vogliamo implementare e testare un'implementazione triviale CachedBookService che decora una IBookService .
  • 9. Esempio - Intro CachedBookService vuole mettere in cache tutte le chiamate seguenti per lo stesso identificativo del libro. Dobbiamo implementare e testare la classe CachedBookService .
  • 12. Testing di: getBook()‏ Come testiamo getBook() ? Dobbiamo isolare la classe ==> non vogliamo un collaboratore concreto di IBookService. Dobbiamo testare le interazioni della classe sotto test con l'oggetto collaboratore: La prima richiesta di un Ibook deve essere delegata a remoteBookService Le richieste seguenti dello stesso devono essere servite dalla cache in locale, quindi non devono invocare il collaboratore “ remoto ” .
  • 13. Def: Endo Testing Vengono verificati gli output, ma anche le interazioni di un'unità' con i collaboratori. “ interaction based testing ” <> “ state based testing ”
  • 14. Def: Mockito Utilizziamo JUnit con un Mock Objects framework: Mockito. I Mock Object: Simulano il comportamento dell'interfaccia. Verificano la sequenza delle chiamate.
  • 15. Mockito - Vantaggi I Mock Object: non si scrivono, ma si dichiarano. sono sensibili al refactoring ritornano dei valori lanciano eccezioni verificano l'ordine di invocazione verificano il numero di chiamate ad un metodo
  • 16. Mockito - Lifecycle crea un Mock Object sull'interfaccia. registra il comportamento atteso. usiamolo indirettamente (! -> chi e' sotto test?). verifica che e' stato usato correttamente.