2009-05-07 3 views
6

Vale la pena, evidentemente, para escribir pruebas de cosas que suceden en el lado del servidor, pero he oído que es realmente difícil escribir pruebas de unidad para las cosas de la interfaz de usuario y que son frágiles y poco confiables. Me encantaría tener más confianza en que los cambios que hago no rompen las partes principales de las páginas de importación en mi sitio.¿Vale la pena el esfuerzo de escribir pruebas que funcionen con el navegador (como usar selenio o algo así)?

¿Alguna idea o experiencia?

Respuesta

2

Los usé como parte del desarrollo. Lo bueno de ellos es que también puedes ejecutarlos en IE (para eso necesitas el servidor de selenio). Los usé solo en la etapa de desarrollo y no los trato como pruebas unitarias. si hago alguna lógica específica de UI, ayudan mucho.

lo más importante es asignar id a todos los elementos html utilizados. sin ella las pruebas son muy frágiles. usar comentarios también ayuda.

3

Es fácil, podría ser hecho por una persona que no sea así y definitivamente vale la pena el esfuerzo. La prueba de UI es difícil para la aplicación de escritorio, no tan difícil para las aplicaciones web porque puedes mover los controles y el selenio aún podrá encontrarlas en HTML. No hay tanta suerte para los desarrolladores de escritorio pobres.

Por supuesto, siempre hay una posibilidad de que exagere hasta el punto en que no le proporcione mucha vuelta en comparación con el esfuerzo, pero es lo mismo con las pruebas de unidad normales. Usted debe saber cuándo detenerse.

0

Puede usar browsershots.org para verificar el aspecto de sus páginas en prácticamente todos los buscadores.

1

Cuantas más pruebas escriba para cubrir las diferentes dinámicas de la aplicación, mejor. Cuando llegue el momento en que necesite cambiar algo en una página que haya generado la aplicación, sus pruebas le indicarán si algo se rompe.

sí que son frágiles y sí, es un dolor es mantener los caminos de selector de locos que trabajan apenas a la derecha ...

4

pruebas de interfaz de usuario puede ser lenta, frágil y dolorosa de mantener, pero algunos errores sólo pueden ser atrapados en las pruebas de interfaz de usuario. La pregunta importante no es si vale la pena escribir pruebas de UI, sino cómo mantener sus pruebas de UI útiles, estables y fáciles de mantener.

Un error común es usar pruebas de IU como sustituto de otras pruebas. Teóricamente, puede probar muchas funcionalidades a través de pruebas de UI, pero hay muchos problemas con ese enfoque. Para empezar, algunas funciones pueden ser muy difíciles de probar directamente en la IU (especialmente en condiciones excepcionales). En segundo lugar, si una prueba falla, a menudo es difícil ver cuál es la fuente del problema. Finalmente, mientras más rutas de código pruebe en las pruebas de UI, más lentas serán las pruebas de UI. Si solo confía en las pruebas lentas, su productividad empeora, lo que aumenta la tentación de simplemente desactivar "temporalmente" las pruebas rotas.

Mi consejo es probar tanto como sea posible en pruebas unitarias y pruebas de integración, crear una buena separación entre su UI y su lógica de negocio, y usar sus pruebas UI para detectar y prevenir errores que no pueden ser probados en otros tipos de pruebas.

Si tiene muchas pruebas, considere crear varias suites. Creé una suite para pruebas de UI, una para pruebas de integración y una para pruebas unitarias. Las pruebas unitarias son muy rápidas, así que las ejecuto a medida que desarrollo mi código (a menudo a través de TDD). Estas son las pruebas que me ayudan a ser productivo.

Las pruebas de integración se ejecutan con menos frecuencia (tal vez después de haber implementado un poco de cambios). Las pruebas de IU que ejecuto cuando me estoy preparando para enviar un cambio (o cuando escribo más pruebas de IU, obviamente).

Un último consejo: considere escribir sus pruebas de UI con un Domain Specific Language. Esto hace que sea más fácil entender las pruebas (porque las lee como un conjunto de pasos de usuario y no como un conjunto de acciones de navegador de bajo nivel). También puede hacer que el código sea más fácil de mantener. Por ejemplo, en lugar de realizar todas las pruebas de las acciones del navegador paso a paso para iniciar sesión en el usuario, puede ver:

LoginPage loginPage = new LoginPage(selenium); 
HomePage homePage = loginPage 
    .enterUserName(TestUsers.Alice.USER_NAME) 
    .enterPassword(TestUsers.Alice.PASSWORD) 
    .submit(); 
assertThat(homePage.getBreadcrumbs(), equalTo("Home"));