Si consideri il seguente metodo:Come chiamare il metodo call e restituire il valore senza eseguire il metodo?
public boolean isACertainValue() {
if(context.getValueA() != null && context.getValueA().toBoolean() == true) {
if(context.getType() != null && context.getType() == ContextType.certainType) {
return true;
}
}
return false;
}
non ho scritto questo codice, è brutto come l'inferno, è totalmente troppo complicata, ma devo lavorare con esso.
Ora voglio testare un metodo che si basa su una chiamata a questo metodo.
ho pensato che avrei potuto fare con questo:
Mockito.when(spy.isACertainValue()).thenReturn(true);
perché questo è il caso che voglio provare.
Ma non funziona in quanto è ancora chiamando il metodo-corpo:/
ricevo nullpointers o meglio ho qualcosa sulla falsariga di
misusing.WrongTypeOfReturnValue; Boolean non può essere restituito da getValueA(). getValueA() dovrebbe restituire ValueA
così ho provato (come una soluzione) per fare:
Mockito.when(contextMock.getValueA()).thenReturn(new ValueA());
e Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);
ma tanto sono un nullpointer che I cant sembrano essere in grado eseguire il debug.
Quindi, come va fatto in questo caso?
questo è esattamente come farlo, ma forse c'è un valore in che valoreA è necessario più avanti nel test, così si dovrebbe anche prendere in giro l'oggetto restituito, non solo il ritorno un'istanza creata con un costruttore (predefinito). – Stultuske