¿Cómo pruebo un sitio web de formularios? Me parece que, en gran medida, depende del estado y la entrada del usuario, no sería factible.
Si no es factible, ¿existe una alternativa automática válida?
testing
unit-testing
Tom Squires
fuente
fuente
Respuestas:
Sí tu puedes. Solo debes tener cuidado de separar bien tus preocupaciones. En resumen, debe eliminar toda su lógica del código subyacente y colocarla en otras clases.
Hay dos formas comunes de hacer esto.
La manera simple es repensar todos los controladores de eventos en términos de "¿Qué información me proporciona el sistema? ¿Qué información necesito completar en la página?" y luego proporciona una clase de servicio que realiza esa conversión.
En este caso, la capa de servicio debe saber muy poco sobre la naturaleza de su capa de presentación. Todavía tiene que tomar los datos devueltos por el servicio y completar los componentes correctos del WebForm en su código subyacente y esto permanece sin probar (al menos por pruebas unitarias, aún puede emplear pruebas de integración). Pero esto rara vez es donde el código sale mal, es mucho más probable que falle en la lógica.
Una forma más complicada, pero más efectiva, es usar el patrón Presentador de vista de modelo . Cuando lo intentamos, descubrimos que los presentadores rápidamente se unieron mucho al marco y, cuanto más desarrollamos MVP, más claro era que MVP realmente quería ser MVC pero no podía serlo.
Dicho esto, otros lo han hecho con mucho éxito, incluso hay un marco webformsmvp disponible para eliminar el trabajo pesado, por lo que su kilometraje puede variar.
fuente
Obviamente, toda una página de formularios web no es una unidad y, por lo tanto, no puede probarse de forma unitaria. Sin embargo, hay algunas cosas que puede hacer para las pruebas automatizadas:
fuente
Lamento haber perdido la parte de la "unidad" de la pregunta ...
SeleniumHQ es tu amigo para las pruebas desde el frente. No es una prueba unitaria, más como una prueba de caja negra. Todavía necesita pensar en casos de prueba válidos ...
fuente
Hablando por experiencia: solo si se hace bien. Por "correcto" me refiero a un mínimo de código subyacente y algo así como el Modelo-Vista-Presentador mencionado anteriormente para hacer que el formulario web sea "tonto". Por lo general, esto resulta muy difícil con las aplicaciones brownfield porque no fueron diseñadas teniendo esto en cuenta y es un esfuerzo casi hercúleo refactorizar / reescribir páginas para usarlo.
fuente
watin
Creo que las pruebas web unitarias son extremadamente útiles, incluso si es solo para dar una idea general de un error de regresión o para nuevos proyectos.
En lo que respecta al estado, puede crear sus pruebas unitarias como lo haría con las pruebas que no son de interfaz de usuario: borran la base de datos al comienzo de la prueba y reconstruyen la base de datos para que no contenga nada excepto el estado de inicio. Cada prueba unitaria encapsula una sola página, o generalmente una tarea distinta en una página.
http://watin.org/ es otra herramienta de prueba web pero para C # /. NET. Escribe las pruebas como pruebas unitarias:
Actualmente está basado en IE pero tiene algún soporte experimental para Firefox y Chrome. Puede automatizar prácticamente cualquier cosa que haría en las pruebas manuales, incluida la interacción con Javascript.
fuente
Realmente no puede probar un sitio web de forma unitaria, simplemente porque las solicitudes web se realizan por cable (o a través de una pila TCP). Por lo tanto, las pruebas no se ajustan a la definición de "prueba unitaria", probablemente serían pruebas de extremo a extremo.
Para ese tipo de pruebas, puede usar una suite como Selenium que ejecuta un navegador web detrás de escena. Sin embargo, una advertencia: por lo general, este tipo de prueba es muy difícil e impredecible, ya que hay muchas partes móviles.
Sin embargo, lo que es más interesante, me preocupa un poco por qué necesitaría probar formularios web. ¿No está poniendo demasiada lógica en el código y tiene una lógica comercial anémica por casualidad?
fuente
Jazmín
En los últimos 5 años, Jasmine se ha convertido en una herramienta clave para las pruebas de unidades frontales. A menudo se incorpora a las pruebas de compilación automática con Node y npm
Por https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine es un marco de prueba de código abierto para JavaScript. [2] Su objetivo es ejecutarse en cualquier plataforma habilitada para JavaScript, no interferir en la aplicación ni en el IDE, y tener una sintaxis fácil de leer. Está fuertemente influenciado por otros marcos de pruebas unitarias, como ScrewUnit, JSSpec, JSpec y RSpec. [3]
A pesar de todas las menciones de javascript, también se puede usar para pruebas unitarias de un formulario web simple.
fuente
ASP.NET
Al desarrollar un sitio ASP.NET pudimos ejecutar pruebas unitarias en:
Es posible TDD todo esto, dependiendo de su arquitectura. Lo único que no puede hacer una prueba unitaria es el diseño del archivo de marcado.
fuente