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:

No hay comentarios.: