2009-11-23 16 views
5

¿Se pueden separar los componentes de una aplicación IceFaces para que se puedan probar de forma aislada en lugar de utilizar algo como Selenium o HttpUnit en la aplicación ensamblada?Pruebas unitarias caras de hielo

Los beans de respaldo se pueden aislar fácilmente (si se escriben para que sean comprobables) pero estoy interesado en probar la plantilla/mostrar partes de la aplicación mientras uso lo mínimo posible del resto de la aplicación. Se puede hacer esto? ¿Cómo?

¿Hay alguna manera de representar un objeto IceFaces como texto usando "datos ficticios" que luego puedo ejecutar a través de las pruebas de unidades tradicionales?

Puedo pensar en formas de hacer todo esto, pero implican la creación de múltiples aplicaciones (una para cada componente que deseo probar). Sin embargo, esto parece una forma subóptima de hacer las cosas.

+1

Para todos los aspirantes a diseñadores de marcos ... considere la mejor manera de adaptarse a las pruebas durante su fase de diseño. :-P –

+0

¡Amen a eso! Definitivamente es una restricción de diseño a tener en cuenta. – Ryan

Respuesta

1

Si entiendo su pregunta correctamente, entonces debe ser una simple cuestión de crear fondos de respaldo simulados especiales para sus páginas, y luego crear una prueba Archivo de configuración JSF mapeando esos beans a los archivos .jspx. Los frijoles ficticios, por supuesto, no tocarán ninguna lógica de negocios o servicios de back-end; simplemente serán simples conjuntos de datos que serán fáciles de verificar en sus pruebas.

Cree una secuencia de comandos ant para sustituir en sus beans de respaldo ficticios y en el archivo de configuración de prueba. Ejecute sus pruebas. Si no quieres algo tan pesado como HTTPUnit, y si estás utilizando Spring en tu aplicación, mira this blog post para obtener una excelente forma de simular un contexto web completo sin un servidor web. Es probable que sus pruebas necesiten oler el resultado de HTML sin procesar para verificar los resultados.Esto va a ser complicado, porque a IceFaces le encantan las identificaciones DIV y otras partes relevantes del árbol DOM que desee oler. (Esto solo puede ser la razón por la que muy pocos desarrolladores JSF intentan probar la salida JSF.)

Una vez que se verifiquen las pruebas, cambie los beans regulares y el archivo de configuración a la aplicación.

Voila! Acaba de probar la unidad de sus componentes JSF.

Tenga en cuenta que todo el asunto de cambiar frijoles y archivos de configuración es complicado. Sería mucho, mucho más fácil si IceFaces utilizara Spring para hacer coincidir los beans de respaldo con las páginas JSF, entonces simplemente podría definir los beans de prueba en un application.xml con las clases de prueba relevantes. Pero tal es la vida.

¡Buena suerte, y hágamelo saber cómo funciona para usted!

1

Esto no es exactamente lo que está pidiendo pero JSFUnit (que usa JUnit, Cactus, HtmlUnit y HttpUnit) parece ser un candidato serio para probar en el terreno de JSF. ¿Consideraste esta opción? Tal vez echar un vistazo a JSFUnit Wiki y su Getting Started Guide.

Tenga en cuenta que la AYUDA está reportando algunos problemas con IceFaces pero es bastante viejo (principios de 2009) y la situación podría haber cambiado desde entonces (hay algunos proyectos de demostración como jboss-jsfunit-examples-icefaces o icefaces-demo-address en el repositorio JBoss por lo que puede valer la pena pregunte el estado exacto en las listas de correo de JSFUnit o IceFaces).

EDITAR: Como se menciona en un comentario, el OP está buscando algo menos "alto nivel". Tal vez echar un vistazo a la Shale Test Framework:

El Marco Prueba de esquisto ofrece bibliotecas de objetos simulados, además de clases base para crear su propio JUnit TestCase s.

objetos Mock se proporcionan en el paquete org.apache.shale.test.mock para los siguientes API de contenedores:

  • JavaServer Faces
  • servlet

responsabilidad: Apache esquisto se trasladó a la Attic en de mayo de 2009 (es decir, ha llegado al final de su vida), pero no conozco ningún otro marco simulado "maduro" para JSF, así que estoy mencionándolo de todos modos (el código todavía está allí). Voy a seguir este hilo con un gran interés para otras soluciones :)

+0

Sí, lo he visto. Lamentablemente, eso es demasiado "alto nivel" para mis necesidades. Quiero probar cada pieza en forma aislada en lugar de la pila completa, como lo hace JSFUnit. – Ryan