Ho chiesto recentemente un paio di domande orientate a jUnit e Mockito e sto ancora lottando davvero per farcela. Le esercitazioni sono tutte per esempi molto semplici, quindi sto facendo fatica ad aumentare i miei casi di test per lavorare per le mie lezioni.Utilizzo di Mockito per lo stub e l'esecuzione dei metodi per il test
Attualmente sto cercando di scrivere alcuni casi di test per un metodo che ho in uno dei miei agenti in una webapp. Il metodo interagisce con un paio di altri metodi all'interno dell'agente per convalidare alcuni oggetti. Voglio solo testare questo metodo in questo momento.
Ecco quello che ho cercato di fare:
Creare un oggetto Mockito del mio agente in questo modo:
MyProcessingAgent mockMyAgent = Mockito.mock(MyProcessingAgent.class);
stub Setup (si spera il termine giusto) utilizzando Mockito. quando così:
Mockito.when(mockMyAgent.otherMethod(Mockito.any(arg1)).thenReturn(requiredReturnArg);
Prova eseguire il mio metodo in questo modo:
List myReturnValue = mockMyAgent.methodThatNeedsTestCase();
mi aspettavo di cose in myReturnValue
, ma ha ricevuto 0 invece così ho cercato di eseguire il debug. Quando chiamo il metodo, non si esegue mai. Ho un punto di debug sulla prima riga del metodo che non viene mai toccato.
Se voglio eseguire il codice in un metodo di una classe, ma impone altri metodi nella classe (uno che tenta di interagire con i database nel mondo esterno) per restituire valori simulati. È possibile con Mockito?
Sembra che il mio attuale metodo di approccio non sia uno stile di prova corretto, ma non sono sicuro di come andare avanti. Posso prendere in giro la mia classe e avere un metodo eseguito come normale mentre altri metodi vengono stubati per restituire i miei valori dati in modo che non debba gestire l'accesso ai dati durante il test di questo metodo?
Per favore, vedi la mia dichiarazione riguardo alle spie e fammi sapere se non sei d'accordo. –
@JohnB Penso che tu abbia ragione. Ho ampliato la risposta. Non mi rendevo conto che l'OP stava chiamando il metodo internamente. –
Grazie per le descrizioni dettagliate, è molto utile. Quindi, quello che entrambe le risposte stanno raccomandando (per chiarire) è che sto attaccando la classe sbagliata con Mock. Dovrei invece prendere in giro tutti gli oggetti di accesso ai dati di cui la mia classe ha bisogno, quindi usare una normale istanza della mia classe per testare? – Kyle