Estoy tratando de usar Powermock y Mockito para simular un método estático vacío para lanzar una excepción como la siguiente. Pero me encontré con un problema. A menos que realice las dos invocaciones de Adder.add() con el mismo argumento, no se lanzará el IOException
burlado.¿Cómo burlarse de un método estático vacío para lanzar una excepción con Powermock?
BTW, he agregado @RunWith(PowerMockRunner.class)
y @PrepareForTest(Adder.class)
a la clase de prueba de la unidad.
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
}
Gracias de antemano. :)
La respuesta es como abajo.
Después de consultar aquí http://code.google.com/p/powermock/issues/detail?id=278, de hecho Adder.add (12) anterior es parte de la configuración método estático simulacro. Significa que al invocar Adder.add() con el argumento 12, se lanzará IOException. Es difícil de entender, ¿verdad? :) Por lo tanto, debe escribirse como a continuación.
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
Esto no es intuitivo en absoluto. Luchado para hacer que esto funcione. Gracias por el consejo. – Dhiraj
Tenga en cuenta que 'Adder.add (anyInt());' no es lo que desencadena la excepción aquí, sino que lo aplica a las llamadas a 'Adder.add()'. – sjngm