java - Conseguir objetos simulados de EasyMock para lanzar Excepciones
easymock maven (2)
Estoy en el proceso de usar EasyMock para escribir pruebas unitarias para varias clases colaboradoras. Una de estas clases (llamémosla Foo
) abre una conexión de red a un servidor remoto y analiza la respuesta XML de los servidores en algo que el resto de las clases pueden usar.
Actualmente, mis pruebas solo abarcan escenarios en los que todo es Hunky-dory y el servidor remoto está funcionando y devolviendo XML como se esperaba. Sin embargo, sería más feliz si pudiera burlarme de Foo
para simular lo que sucede si el servidor remoto está inactivo, o si hay algún otro problema que cause que Foo
lance una IOException
.
He echado un vistazo a la API de EasyMock y no puedo ver nada que se parezca a un método que le pide a un simulacro que lance una Excepción.
No es absolutamente esencial para mí realizar pruebas basadas en Exception
, pero tengo curiosidad por saber si es posible con EasyMock, y creo que sería útil probar el contrato público de Foo
de esta manera.
¿Alguien ha hecho algo así con EasyMock antes?
Referencias
De la documentation :
Para especificar las excepciones (más exactamente:
Throwable
s) que seexpectLastCall()
, el objeto devuelto porexpectLastCall()
yexpect(T value)
proporciona el método yandThrow(Throwable throwable)
. El método se debe llamar en estado de registro después de la llamada al objeto simulado para el que especifica elThrowable
que se debe lanzar.Las excepciones no verificadas (es decir,
RuntimeException
,Error
y todas sus subclases) se pueden lanzar desde todos los métodos. Las excepciones marcadas solo pueden ser lanzadas desde los métodos que realmente las lanzan.
Por ejemplo:
expectLastCall().andThrow(new HibernateException("Something terrible happened"));
expect(query.list()).andThrow(
new HibernateException("Something terrible happened"));
puede utilizar el método y el andThrow(Throwable throwable)
en simulacro fácil. Verifique la documentation - encabezado Trabajar con excepciones .
Por ejemplo
expect(mock.voteForRemoval("Document"))
.andThrow(new RuntimeException(), 4);