Estoy desarrollando una aplicación Java 6 EE y estoy probando mi código jsp con otro con una versión de prueba de las llamadas de función y el código utilizado en el original, pero parece suelto y poco práctico. ¿Hay una buena manera de realizar este tipo de pruebas?
12
Respuestas:
Si no ha leído sobre MVC (modelo de controlador de vista), hágalo. No debe tener código en un JSP, solo mostrar. Poner código en JSP es muy de 1900.
En serio, si no hay código en el JSP, no estás probando el JSP. Estás probando la acción / flujo. Entonces podrías usar HttpUnit o Selenium . La gran diferencia es que Selenium prueba desde un navegador real.
fuente
No creo que haya una buena manera de probar los JSP, principalmente porque se desarrollaron antes de que las pruebas unitarias se convirtieran en un foco de desarrollo.
Robert Martin escribió un artículo hace varios años sobre cómo hackear el compilador JSP para que pueda dirigir pruebas unitarias no basadas en contenedores. Su idea era buena, pero se rompió con el próximo lanzamiento principal de TomCat. Simplemente hay demasiada magia sucediendo.
No estoy de acuerdo con la idea de "simplemente no agregue código y no tendrá que probarlo". OBVIAMENTE no deberías poner código en el JSP. Sin embargo, una IU compleja a menudo tendrá una lógica de visualización que podría probarse de forma rentable.
Considere este ejemplo:
Este código ya está bien factorizado: la lógica para decidir si mostramos el menú de administración no está en la vista. Sin embargo, si hubiera una manera fácil de probar los JSP unitarios, entonces podríamos escribir una prueba para mostrar que el comportamiento que queremos realmente aparece, y nos protegería de un cambio en la página que accidentalmente hizo visible el menú de administración cuando no debería. 't be.
fuente
Existe un programa (utilizado por cualquier servidor de aplicaciones que esté utilizando) que compila un archivo .jsp en un archivo .java. Por ejemplo, la versión jspc de sun / oracle .
Una vez que tenga el .java que produciría la traducción .jsp (incluso puede considerar usar esto como parte del proceso de compilación, precompilar el jsp para mejorar el rendimiento en el primer hit), luego puede ejecutar pruebas contra él burlándose de la solicitud y verificando que la respuesta es lo que espera.
(editar con ejemplo :)
El método clave para esto es el
_jspService(HttpServletRequest, HttpServletResponse)
método.Un trivial hola mundo jsp:
(test.jsp ubicado dentro de un directorio llamado 'webapp' y también un directorio 'out') Cuando se compila con el comando
jspc -v -d out -compile -uriroot webapp/ test.jsp
coloca en un directorio out un archivo llamadotest_jsp.java
. Este archivo tiene dentro (junto con un poco de otra configuración):En este punto, es una comprobación para asegurarse de que se llama a JspWriter con write o print y que el contenido de la llamada es lo que espera que sea.
Dicho todo esto, en un mundo ideal, uno no debería tener ninguna lógica dentro del jsp; dicha lógica estaría en el controlador o en taglibs que se prueban con otras técnicas.
fuente
También puede considerar usar un marco de prueba de unidad HTTP como HTTPUnit | http://httpunit.sourceforge.net/ .
Otro punto importante es separar bien las preocupaciones de su aplicación.
Por ejemplo, utilizando técnicas como TDD (http://en.wikipedia.org/wiki/Test-driven_development), diseñará tipos para la comprobabilidad.
Los tipos consumidos dentro de JSP se probarán en pruebas unitarias específicas. Si esto no es posible, debe simular la interacción usuario -> navegador (nuevamente, HTTPUnit o herramienta similar).
fuente
fuente