Sto cercando di utilizzare Powermock e Mockito per simulare un metodo statico di annullamento per generare un'eccezione come di seguito. Ma ho incontrato un problema. A meno che non crei le due invocazioni di Adder.add() con lo stesso argomento, il mocked IOException
non verrà lanciato.Come simulare un metodo statico di annullamento per generare un'eccezione con Powermock?
BTW, ho aggiunto @RunWith(PowerMockRunner.class)
e @PrepareForTest(Adder.class)
alla classe di test dell'unità.
class Adder{
public static void add(int i) throws IOException{
return;
}
}
@Test
public void testAdder() throws IOException{
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(12);
try {
Adder.add(11);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// assert things
}
Grazie in anticipo. :)
La risposta è come di seguito.
Dopo aver consultato qui http://code.google.com/p/powermock/issues/detail?id=278, infatti Adder.add (12) sopra è parte dell'impostazione del metodo statico simulato. Significa quando si richiama Adder.add() con argomento 12, verrà generata IOException. È difficile da capire, giusto? :) Quindi dovrebbe essere scritto come sotto.
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
Questo non è affatto intuitivo. Faticato per farlo funzionare. Grazie per il consiglio. – Dhiraj
Si noti che 'Adder.add (anyInt());' non è ciò che attiva qui l'eccezione, la applica alle chiamate a 'Adder.add()'. – sjngm