StrutsTestCase

0
10960

StrutsTestCase

Introducción

StrutsTestCase es una extensi&oacuten de junit que permite realizar pruebas sobre
aplicaciones basadas en Struts.

Provee dos maneras diferentes de realizar las pruebas: mediante mock objects
(las clases ServletRequest, ServletResponse y aquellas manejadas por el
servidor de aplicaciones son mock objects), o mediante Cactus (un contender de
servlets ligero). El cambiar entre cualquiera de las dos aproximaciones es tan
sencillo como cambiar la clase de la que heredará nuestro test, sin que el test
en sí cambie.

Personalmente prefiero usar mock objects en lugar de Cactus. Usar Cactus
implica que nuestro proyecto tiene más dependencias y configuraciones. Con mock
objects todo queda más sencillo, aunque dependediendo del tipo de aplicación
necesitaremos realizar ciertas inicializaciones, como veremos en el ejemplo que
sigue.

Podéis descargarlo y acceder a la documentación en http://strutstestcase.sourceforge.net/.

Otras opciones para realizar este tipo de pruebas es utilizar otras
herramientas que nos permiten simular navegaciones en cualquier aplicación web
(ya no nos estaríamos casando con struts), y como lo normal es que cada acción
funcional este asociada a un action de struts, realizaríamos pruebas sobre los
action (con salvedades como que ya dependemos de un servidor de aplicaciones y
la configuración que todo ellos conlleva). Una herramienta muy útil para estos
menesteres, Selenium, la podéis ver en el tutorial de mi compañero Víctor: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=seleniumIDE.

El código de ejemplo

Veremos cómo usar StrutsTestCase para una aplicación que usa Struts 1.3,
contruida con Maven.

La aplicación trata de una sencilla librería por internet, donde se necesita
estar logado para realizar las acciones, y finalmente se pueden realizar
búsquedas filtradas de los libro.

Veamos como ejemplo una clase de acción de la que vamos a realizar tests:

Y la clase de la que hereda, que verifica que un usuario esté o no logado
para todas las acciones:

Por último nos quedaría ver la clase de test de junit con su extensión de
StrutsTestCase (veréis que es un test de JUnit 3, ya que no podemos usar test
de JUnit 4 con StrutsTestCase) (aunque JUnit 4 es capaz de ejecutar tests de
JUnit 3):

Veamos ciertas características del test:

  • Si reescribimos el método SetUp, debemos explícitamente llamar a
    super.setUp()
    . Si no lo hacemos StrutsTestCase no se
    inicializará correctamente.
  • Hereda de MockStrutsTestCase (si quisieramos Cactus debe heredar de
    CactusStrutsTestCase, y configurar Cactus).
  • Al usar mock objects en la ServletRequest y ServletResponse, hay ciertos
    atributos que nadie setea (como contextPath o requestURI), pero que podemos
    o tendremos que establecer nosotros, accediendo a los objetos derequest y
    response mediante getMockRequest() y getMockResponse() y realizar las
    operaciones necesarias.
  • Sin embargo todos aquellos atributos que nuestro action ponga en sesión o
    cualquier otro contexto se mantendrá durante toda la prueba (cada uno de
    los métodos del test de JUnit), por tanto si queremos probar una búsqueda y
    necesitamos estar logados, en la prueba de búsqueda debemos logarnos
    antes.
  • Por defecto busca el fichero struts-config.xml. Si tuviéramos diferentes
    nombres se pueden indicar con el método setConfigFile(pathname).
  • Los ficheros web.xml y struts-config.xml deben estar en
    el classpath para que StrutsTestCase los pueda encontrar y procesar. Una
    solución, si se realiza desde eclipse, es añadir la carpeta webapp al build
    path (StrutsTestCase busca realmente WEB-INF/web.xml y
    WEB-INF/struts-config.xml). Desde maven hemos de configurar el plugin
    surefire, como veremos a continuación

Por último veamos cómo quedaría nuestro fichero de pom, para ver las
dependencias necesarias y la configuración del plugin de surefire para añadir
la carpeta webapp al classpath:

Conclusiones

Ya veis que en Autentia nos gusta
trabajar bien, y con las últimas herramientas, que nos ahorren tiempo y
esfuerzo, asi que no dudéis en contactar con nosotros para más información.

Dejar respuesta

Please enter your comment!
Please enter your name here