2008-09-10 14 views
14

Tengo un montón de servlets ejecutándose bajo el contenedor de servlets de Tomcat. Me gustaría separar el código de prueba del código de producción, así que consideré usar un marco de prueba. JUnit está muy bien integrado en Eclipse, pero no pude ejecutar servlets utilizando un servidor Tomcat en ejecución. ¿Podría recomendar un marco de prueba de unidades que admita la prueba de servlets de Tomcat? La integración de Eclipse es agradable pero no necesaria.servlets de prueba de unidades

+0

Utilizo jUnit para abrir un contenedor de servlet Jetty antes y lo apago si lo hago después. – LeeGee

Respuesta

9

Consulte ServletUnit, que es parte de HttpUnit. En pocas palabras, ServletUnit proporciona una biblioteca de simulacros y utilidades que puede usar en las pruebas ordinarias de JUnit para simular un contenedor de servlets y otros objetos relacionados con servlets, como los objetos de solicitud y respuesta. El enlace de arriba contiene ejemplos.

+2

El proyecto HttpUnit parece no tener actividad desde 2008-05. Tal vez está muerto? – Raedwald

5

Bien. Ignorando el bit 'tomcat' y la codificación del servlet, la mejor opción es crear simulaciones para la respuesta y solicitar objetos, y luego contarle lo que espera de él.

Así que para una doPost vacío estándar y utilizando EasyMock, tendrá

public void testPost() { 
    mockRequest = createMock(HttpServletRequest.class); 
    mockResponse = createMock(HttpServletResponse.class); 
    replay(mockRequest, mockResponse); 
    myServlet.doPost(mockRequest, mockResponse); 
    verify(mockRequest, mockResponse); 
} 

A continuación, empezar a añadir código al doPost. Los simulacros fallarán porque no tienen expectativas, y luego puedes establecer las expectativas desde allí.

Tenga en cuenta que si desea utilizar EasyMock con clases, deberá usar la biblioteca de extensiones de clases EasyMock. Pero funcionará de la misma manera a partir de ese momento.

1

Para las pruebas "in-contenedor", echar un vistazo a Cactus

Si usted quiere ser capaz de probar sin un recipiente funcionando usted puede simular sus componentes con sus propios mockobjects (por ejemplo, con EasyMock) o podría intentar MockRunner que tiene stubs "predefinidos" para probar servlets, jdbc-connections etc.

+0

"08/08/2011 - Jakarta Cactus ha sido retirado". – Raedwald

2

separar las partes de que el código que se ocupan de las peticiones HTTP y la respuesta de las partes que hacen negocios la lógica o la manipulación de la base de datos. En la mayoría de los casos, esto producirá una arquitectura de tres niveles, con una capa de datos (para la base de datos/persistencia), capa de servicio (para la lógica de negocios) y una capa de presentación (para las solicitudes y respuestas HTTP).

  1. Puede probar las dos primeras capas sin ningún tipo de servlet; será más fácil probarlo de esa manera.
  2. Puede probar la capa de presentación, as others suggest, utilizando objetos simulados de solicitud y respuesta HTTP.
  3. Por último, si cree que es realmente necesario, puede realizar pruebas de integración usando también como HtmlUnit o JWebUnit.
0

Actualizado en febrero de 2018: OpenBrace Limited has closed down, y su producto ObMimic ya no es compatible.

Si desea una alternativa más nueva a ServletUnit para la prueba JUnit de Servlets, puede encontrar que la biblioteca ObMimic de mi empresa es útil. Está disponible de forma gratuita desde la página web downloads.

Al igual que con ServletUnit, proporciona una biblioteca de clases que puede usar en pruebas JUnit o TestNG normales fuera de cualquier contenedor de servlets para simular la API de Servlet.

Sus objetos Servlet API tienen constructores sin argumentos, son totalmente configurables e inspeccionables para todos los ajustes y datos relevantes de la API Servlet, y proporcionan una simulación completa de todo el comportamiento especificado por el javadoc de la API de Servlet. Para ayudar con las pruebas hay soporte para la grabación selectiva de las llamadas a la API Servlet, control sobre cualquier comportamiento dependiente del contenedor, verifica cualquier llamada ambigua (es decir, donde el comportamiento de la API Servlet no está completamente definido) y una simulación JNDI en memoria para cualquier código de servlet que se basa en búsquedas JNDI.

Para obtener detalles completos, ejemplos de código, guías de "cómo hacerlo", Javadoc, etc., visite el sitio web.

Cuestiones relacionadas