1. Tutorial (JUG Milano Meeting 69 Maggio 2015) Gualtiero Testa
[email protected] www.gualtierotesta.it @gualtierotesta
www.linkedin.com/in/gualtierotesta
2. 29/05/2015 Tutorial Mockito 2 Indice Esempio 1 : uso
canonico di Mockito Teoria: schema logico di un test Esempio 2 :
osservare gli output Teoria: dove si usa il mocking Esempio 3:
partial mocking Teoria: scheda su Mockito e AssertJ, Mockito vs
EasyMock Esempio 4: integration test con mocking Sintassi
3. 29/05/2015 Tutorial Mockito 3 Progetto pratico Nelle pagine
web di un forum si vuole mostrare il numero di utenti connessi in
quel momento. Realizzare una funzione che restituisce una stringa
con il numero di utenti connessi Esempio di output Nessun utente
connesso 1 utente connesso 5 utenti connessi
4. 29/05/2015 Tutorial Mockito 4 Esempio 1 Obiettivo: l'uso
tipico di Mockito: per controllare gli input Caso con dipendenza
esterna: il numero di utente connessi calcolato da un metodo di
un'altra classe chiamato dal nostro metodo Una istanza della classe
esterna passata alla classe sotto test Codice testabile
5. 29/05/2015 Tutorial Mockito 5 Schema logico di un test
System under test (SUT) INPUT (da controllare) OUTPUT (da
osservare) GIVEN WHEN THEN
6. 29/05/2015 Tutorial Mockito 6 Input (da controllare)
Parametri passati al metodo sotto test Costanti Configurazioni:
variabili d'ambiente, file... Valori restituiti da altri metodi
della stessa classe o di classi esterne Risposte da webservice,
query su DB, lettura di code,.... Azioni dell'utente Eventi in
genere
7. 29/05/2015 Tutorial Mockito 7 Esempio 2 Obiettivo: Usare i
mock per osservare e verificare gli output del codice sotto test
Argomenti: Verify, times capture matcher
8. 29/05/2015 Tutorial Mockito 8 Output (da osservare) Il
valore di ritorno del metodo sotto test (se non void) I metodi
chiamati durante l'esecuzione: Chi stato chiamato e con quali
parametri Quante volte stato chiamato In quale sequenza Risultati
azioni e cambiamenti di stato Es. file creato/inviato
9. 29/05/2015 Tutorial Mockito 9 Dove si usa il mocking ?
Presentation Services Business logic Data (EIS) ?
10. 29/05/2015 Tutorial Mockito 10 Mockito http://mockito.org/
Creato da Szczepan Faber (PL) Versione corrente : Stabile: 1.10.19
(Dic '14) Ultima: 2.0.x (in beta) Disponibile anche su Android I
mock sono proxy creati dinamicamente con CGLib
11. 29/05/2015 Tutorial Mockito 11 Cosa manca In alcuni casi,
Mockito non pu aiutarci: Metodi e classi static, final, private
Enum Dipendenze create nel metodo (con il new) Dipendenze definite
nel costruttore e negli inizializzatori In questi casi si pu usare
PowerMock O migliorare il codice ;-)
12. 29/05/2015 Tutorial Mockito 12 AssertJ
(http://joel-costigliola.github.io/assertj/) Libreria di
asserzioni: utile per osservare e validare gli output del test
Alternativa a quella di jUnit (Hamcrest) Punto di ingresso:
Assertions.assertThat(x) A cui aggiungere, in maniera fluent, i
controlli che dipendono dal tipo di x Es. se X una collection
contenente JUG, MILANO
assertThat(x).hasSize(2).contains(JUG).doesNotContain(PUG) Versione
corrente: 2.0 (Marzo 2015) (3.0 per Java8)
13. 29/05/2015 Tutorial Mockito 13 Esempio 3 Obiettivo: partial
mocking, test del codice nelle classi abstract Argomenti: Partial
mocking Spy Mockito.doReturn().when()
15. 29/05/2015 Tutorial Mockito 15 Mockito vs EasyMock [2]
Approccio Mockito (given, when, then): Crea il mock e gli stub
Esegui il metodo sotto test Verifica risultati attesi Approccio
EasyMock (record, playback) Crea il mock e gli stub Usa il metodo
come dovrebbe eseguirlo il metodo sotto test Esegui il metodo sotto
test Verifica altri risultati attesi
16. 29/05/2015 Tutorial Mockito 16 Esempio 4 Obiettivo: il
mocking per ridurre il peso degli integration test Quando
disponibili (ad es. Spring) usiamo i mock disponibili nel framework
utilizzato
17. 29/05/2015 Tutorial Mockito 17 Sintassi: creazione mock
Senza annotation: MyClassmockedInst=Mockito.mock(MyClass.class)
MyInterfacemockedInst=Mockito.mock(MyInterface.class) Con
annotation e runner Mockito @RunWith(MockitoJUnitRunner.class)
@MockMyClassmockedInst Con annotation (quando si usa un'altro
runner) MockitoAnnotations.initMocks(MyClass)
@MockMyClassmockedInst
18. 29/05/2015 Tutorial Mockito 18 Sintassi: stubbing Standard:
Mockito.when(mock.method(params))
.thenReturn(...)//perrispostestatiche
.thenAnswer(Answer)//perrispostecalcolate .thenThrow(throwable)
.thenCallRealMethod()//richiamailverocodice
BDDMockito.given(mock.method(params)).will* Spy partial mocking:
Mockito.do*(xxxx).when(mock).method(params) Nota: Il metodo non
viene eseguito. Il when vuole solo il mock.
19. 29/05/2015 Tutorial Mockito 19 Sintassi: verifica Verifica
invocazione singolo metodo verify(mock,).method(params)
Times:times(n),never(),atLeast(n),atMost(n) Verifica interazioni
con mock verifyZeroInteractions(mock)
verifyNoMoreInteractions(mock) Matching argomenti:
anyInt,anyString, anyClass,..