2011-02-17 21 views
19

Estoy en proceso de usar EasyMock para escribir pruebas unitarias para varias clases colaboradoras. Una de estas clases (vamos a llamarlo Foo) abre una conexión de red a un servidor remoto y analiza la respuesta XML de esos servidores en algo que el resto de las clases puede usar.Getting EasyMock simula objetos para lanzar excepciones

Actualmente, mis pruebas solo abarcan escenarios en los que todo es caprichoso y el servidor remoto está en funcionamiento y devolviendo XML como se esperaba. Sin embargo, I sería sería más feliz si pudiera burlar Foo para que simule lo que sucede si el servidor remoto está inactivo, o si hay algún otro problema que ocasione que IOException sea lanzado por IOException por Foo.

He echado un vistazo a la API de EasyMock, y no puedo ver nada que parezca un método que pide una simulación para lanzar una excepción.

No es absolutamente esencial para mí tener pruebas basadas en Exception, pero tengo curiosidad si es posible con EasyMock, y creo que sería útil probar el contrato público Foo de esta manera.

¿Alguien ha hecho algo como esto con EasyMock antes?

Referencias

Respuesta

27

Desde el documentation:

Para excepciones que especifican (más exactamente: Throwable s) a ser lanzadas, el objeto devuelto por expectLastCall() y expect(T value) proporciona el método andThrow(Throwable throwable). El método debe llamarse en estado de registro después de la llamada al objeto simulado para el que especifica el Throwable que se lanzará.

Se pueden generar excepciones sin marcar (es decir, RuntimeException, Error y todas sus subclases) desde todos los métodos. Las excepciones comprobadas solo pueden arrojarse de los métodos que realmente las arrojan.

Por ejemplo:

expectLastCall().andThrow(new HibernateException("Something terrible happened")); 

expect(query.list()).andThrow(
     new HibernateException("Something terrible happened")); 
+0

totalmente perdidas ello. Gracias. – Jon

+0

Si alguien encuentra que esto no funciona para ellos ... asegúrese de usar EasyMock.replay –

4

puede utilizar el método de andThrow(Throwable throwable) fácil simulacro. Consulte documentation - encabezado Trabajando con excepciones.

Por ejemplo

expect(mock.voteForRemoval("Document")) 
    .andThrow(new RuntimeException(), 4); 
+0

Perdí en mi lectura omisa de la documentación. Gracias. – Jon

Cuestiones relacionadas