2009-01-04 32 views
17

¿Cuál es la mejor manera de probar el código GWT?¿Cuál es la mejor manera de probar el código GWT

GWTTestCase en modo alojado es demasiado lento y ninguno de los marcos de burla funcionan.

Actualmente estamos siguiendo MVC como se sugiere en http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ y usando GWTMockUtilities desarmar() y restaurar() para simular widgets. Y no hemos descubierto una forma de probar View en GWT MVC. ¿Hay una mejor manera de probar el código GWT?

Respuesta

14

Si está buscando probar los widgets GWT de forma aislada, no hay muchas opciones. Puede utilizar un GWTTestCase para crear instancias de sus widgets y probarlo a través de su API, que es lo que hace Google para el GWT widgets de sí mismos: Source for RadioButtonTest

Sin embargo, el mecanismo de disparo por eventos que no funciona en GWTTestCases, lo que significa que puede Haga cosas como hacer clic en un botón de programación y espere que se invoque el método de devolución de llamada onClick() en un oyente. También es difícil, si no imposible, llegar al DOM subyacente, por lo que puede no ser la mejor herramienta para probar código de emisión de HTML de bajo nivel.

Parece que está siguiendo todos los pasos correctos; El artículo de Rob proporciona una excelente descripción de cómo escribir código comprobable usando el patrón de diseño Model-View-Presenter (MVP). Mientras más lógica mantenga fuera de la capa de vista, mejor. Cuando eso no sea posible, use una herramienta como Selenium para crear pruebas enfocadas del comportamiento de la IU dinámica.

Seguí una estrategia similar - MVP con código mínimo en los widgets. En algunos casos, escribí un código que ajustaría la clase Grid, así que pude crear una instancia de mi componente en un GWTTestCase, pasarle una Grid, invocar algunos métodos en mi componente y verificar el estado de la Grid. Escribí un artículo para Better Software sobre Test-First GWT, que puedes leer on my blog.

Si está buscando probar el código que utiliza clases GWT que no son UI (como codificación URL o Diccionarios), tendrá que usar GWTTestCase, o seguir estrategias de ajuste similares hasta que el código sea demasiado simple para romper . Luego use una prueba de integración con una herramienta como Selenium, o unas pocas GWTTestCases que solo prueban que está usando la biblioteca correctamente, como dice J.B. Rainsberger, "¡No pruebe el marco!"

4

Lo que funcionó para mí:

uso clásico modelo/vista/controlador (por ejemplo, ninguna lógica de negocio en la vista o controlador; controladores sólo traducen ver eventos en llamadas de método en el modelo).

Desacople el modelo y el código de controlador de los widgets de vista GWT y cualquier otra clase que dependa de GWT y no pueda crearse una instancia en una JVM simple. Luego puede probarlos con el viejo JUnit.

Escriba pruebas de extremo a extremo para probar el sistema a través de la GUI para asegurarse de que los modelos y controladores estén conectados correctamente a las vistas. Descubrimos que es más rápido implementar e iniciar la aplicación y luego interactuar con ella a través de un navegador controlado desde JUnit con WebDriver que utilizar GWTTestCase.

Use JMock para probar llamadas asincrónicas como esta: http://www.jmock.org/gwt.html.

+0

Solo mis 2 centavos sobre una advertencia necesaria para ejecutar algunas de mis pruebas GWT JUnit que usaban JMock en Eclipse: Necesitaba agregar gwt-dev.jar a la ruta de clases de algunas clases de prueba JUnit específicas que usan JMock; antes de hacerlo, dichas clases tenían este error: java.lang.NoClassDefFoundError: com/google/gwt/core/shared/GWTBridge – cellepo

8

Como alernative, usted debe tratar gwt-test-utils, que logran ejecutar código de cliente GWT en una JVM independiente y proporciona alguna característica para burlarse de todo lo que quieras (componente, servicios RPC, etc. ..)

+0

Intenté usar gwt-test-utils. Pero da: java.lang.RuntimeException: Error al cargar la subclase JavaScriptObject y las instancias de Patcher ... cualquier idea – MountainRock

Cuestiones relacionadas