È possibile generare un'eccezione ogni volta che viene chiamata una simulazione con argomenti non predefiniti? C'è Answers.RETURNS_SMART_NULLS
, ma non è proprio quello di cui ho bisogno, dal momento che non funziona se null
è un valore di ritorno legittimo, che non porta a NullPointerException
, ma piuttosto a errori successivi.Come si fa a Mockito lanciare un'eccezione quando viene chiamata una simulazione con parametri non definiti?
Modifica: alcuni sfondi. Così, in Mockito quando si definisce un modello, è necessario specificare i valori di ritorno per ogni chiamata in questo modo:
when(myMock.someMethod(arg1, arg2)).thenReturn(returnValue);
Quando myMock.someMethod
viene chiamato con argomenti, per cui non ho dato un valore di ritorno nel test, restituisce semplicemente null
. Mi piacerebbe configurarlo per bloccarsi subito e dirmi che ho dimenticato di definire il valore di ritorno per alcune combinazioni di parametri.
Modifica 2: c'erano suggerimenti per fornire un numero personalizzato defaultAnswer
che genera eccezioni quando viene chiamato. Sfortunatamente, questo non funziona. Il metodo di risposta predefinita 'answer()
viene chiamato anche se è presente una simulazione. Ecco un esempio:
public class Test {
public static class Adder {
public int add(int a, int b) {
return a + b;
}
}
public static final Answer<Object> THROW_ON_UNDEFINED_ARGS = new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
throw new IllegalArgumentException(
String.format("Calling a mock with undefined arguments: %s %s",
invocation.getMethod(),
Arrays.toString(invocation.getArguments())));
}
};
public static void main(String[] args) {
Adder adderMock = mock(Adder.class, THROW_ON_UNDEFINED_ARGS);
when(adderMock.add(2, 3)).thenReturn(5);
System.out.println(adderMock.add(2, 3));
}
}
L'eccezione viene generata anche se adderMock.add(2, 3)
è definito.
"È possibile generare un'eccezione ogni volta che viene chiamata una simulazione con argomenti non predefiniti?" - Cosa significa esattamente? Vuoi simulare il lancio di un'eccezione se alcuni parametri vengono passati? Quali argomenti non prefediati significano? – M4ks
Quindi, in Mockito si definiscono i valori di ritorno per mock come questo: 'when (myMock.someMethod (arg1, arg2)). ThenReturn (result)'. Se 'myMock.someMethod' viene chiamato con altri argomenti, restituisce null.Voglio che fallisca subito e dimmi, quel finto fu chiamato con argomenti, per i quali non definivo il valore di ritorno. –