Mostrando las entradas con la etiqueta easymock. Mostrar todas las entradas
Mostrando las entradas con la etiqueta easymock. Mostrar todas las entradas

martes, 24 de junio de 2008

mock: Comportamiento para metodos void

Para configurar el comportamiento en metodos que retornan algun valor, se emplea el metodo estatico expect correspondiente a la clase org.easymock.EasyMock. Por ejemplo:
InetAddress addr = createMock(InetAddress.class);
expect(addr.getHostAddress()).andReturn("localhost");
Para configurar el comportamiento en metodos void, o sea, metodos que no devuelven valor alguno, es necesario emplear el metodo estatico lastExpectCall justo despues de configurar la invocacion al metodo del objeto mock. Por ejemplo:
byte[] bytes = new byte[8192];
OutputStream os = createMock(OutputStream.class);
os.write(bytes, 0, bytes.length);
expectLastCall().andThrow(new IOException());
Asi como en el ejemplo anterior una excepcion fue configurada, se pueden emplear cualquiera de los metodos asociados al expect.

Vinculos:

miércoles, 30 de abril de 2008

easymock: IllegalStateException y matchers

Una excepcion arrojada frecuentemente por EasyMock es la siguiente:
java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
En particular, esto ocurre cuando un metodo de un objeto es invocado sin configurar previamente un matcher para cada argumento.
En general, para un metodo que posee n argumentos, EasyMock espera n matchers, en caso que, para alguno de esos argumentos, un matcher sea utilizado.

Observe el siguiente codigo:
public class Prueba {
public void metodo(String arg1, int arg2) {}
}
Al crear un mock para la clase prueba, se configurar la invocacion del unico metodo que posee, de la siguiente manera:
Prueba p = EasyMock.createControl().createMock(Prueba.class);
p.metodo(isA(String.class), 0);
Al ejecutar el codigo anterior, EasyMock arrojara una IllegalStateException, como la descripta al comienzo. Esto se debe a que isA es un matcher y no todos los argumentos en la configuracion del metodo utilizan matchers.
Modificando la configuracion para la invocacion del metodo de la siguiente manera:
p.metodo(isA(String.class), anyInt());
el codigo ejecutara sin inconvenientes, ya que todos los argumentos del metodo estan configurados empleando matchers.

Vinculos: