WinstonSmith ha scritto:
Sarà che è un argomento nuovo, la fretta, ma non riesco a capirlo.
Per come avevo inteso io, questa classe, la classe controller, la Service erano tra loro separate, si testava la singola classe, che non in contatto con le altre. Tnt'è che la classe con il servicemock che invece preleva dati dal db, "funziona"... when(serviceMock.getAll()).thenReturn(listacreataDueRighePrima)
Ascolta, allora: il tuo scenario, immagino, sarà qualcosa del tipo (tipico, comunque, in generale):
Controller ----> Service ----> Dao
Vuoi testare il Controller? Bene. Il Controller ha di certo un riferimento al Service e invocherà i suoi metodi in qualche modo in base a qualche logica.
Nello unit test del Controller NON devi avere il Service "reale". Devi averne uno fittizio, un mock appunto.
Quindi nella classe di test dovrai creare un "mock" per il Service. E attenzione, devi fare in modo che il Controller usi QUESTO mock e non il Service "reale"! Pertanto devi o impedire che il Controller si crei per conto suo il Service reale oppure devi "rimpiazzare" (magari con un apposito setter se c'è o se è possibile metterlo) l'oggetto Service in modo da fargli usare il mock.
Dopo questa fase di setup generale dell'oggetto sotto-test, ciascun metodo @Test avrà tipicamente 3 fasi:
1) imposta il/i mock usando when() / doThrow() ecc... secondo i casi e quale metodo del mock.
2) invoca il metodo dell'oggetto sotto test (nel tuo caso del Controller).
3) verifica le aspettative, in termini sia di "assert" (es. sul valore di ritorno, se c'è) oppure di interazione con i mock (i verify() ).