consideri uno scenario in cui stiamo testando un metodo che dipende da un collaboratore . Questo collaboratore prende una discussione mentre chiama uno dei suoi metodi. Ora ci possono essere due scenarios- 1. L'argomento viene passato esternamente al metodo stiamo testando e poi utilizzato dal collaboratore durante il proprio metodo di chiamata
method(argument arg)
{
collaborator.callMethod(arg);
}
Per testare questo metodo deridiamo collaboratore e quindi chiamare il metodo come segue
method(arg1);
Mockito.verify(collaborator).callMethod(arg1);
Così qui nel metodo di prova abbiamo l'istanza arg1 e quindi può essere verificata
2.L'argomento utilizzato dal collaboratore per rendere il proprio metodo di chiamata non è passato esternamente ma crea all'interno del metodo in prova
method()
{
arg=CreateArgumentInternally();
collaborator.callMethod(arg);
}
Per testare questo metodo deridiamo il collaboratore e quindi chiamare il metodo come segue
metodo
();
Ma come verificare che il collaboratore è stato chiamato con quali argomenti poiché non abbiamo l'accesso all'argomento poiché è stato creato internamente all'interno del metodo. Questo in cui il Mockito ArgumentCaptor entra in scena.
Usando ArgumentCaptor possiamo ottenere l'istanza argomento creata internamente e utilizzata nella chiamata collaboratore e quindi possiamo verificarla.
Mockito.verify(collaborator).callMethod(captor.capture());
Argument actual = captor.getValue();
Reference Understanding Mockito ArgumentCaptor using Spring Boot Test Example
Che cosa succede se ci sono più parametri passati nel metodo - tutti i diversi tipi? Come si verifica effettivamente che il parametro booleano fosse ** true **, ad esempio. –
Puoi fornire una spiegazione per il tuo commento: _Oh, e per favore considera di usare TestNG invece di JUnit._. Perché considerarlo? Perché cambiare? – Navigatron