Sé que la razón por la que Microsoft salió con ASP.NET MVC fue para simplificar el diseño basado en pruebas (TDD) para ASP.NET. Sin embargo, tengo una aplicación de campo marrón bastante grande (existente) en ASP.NET WebForms en la que me encantaría implementar algunas funciones de tipo TDD. Estoy asumiendo que HAY una forma de hacerlo, pero ¿cuáles son algunas opciones viables?Cómo implementar TDD en ASP.NET WebForms
Respuesta
Microsoft presentó ASP.NET MVC porque pensaban que podían ganar dinero con un mercado sin explotar: aquellos que sienten que los formularios web son demasiado "pesados" y que están programando con un marco más liviano. Esto incluye a aquellos que están acostumbrados al paradigma de MVC.
También incluye a aquellos que no pudieron resolver cómo hacer pruebas unitarias en formularios web, y que desean usar pruebas unitarias y TDD.
La forma de hacerlo con formularios web, como con cualquier otra cosa, es separar todo menos el código de UI en clases separadas en una biblioteca de clases. Use TDD para desarrollar esas clases.
La siguiente capa de controversia es si es necesario usar TDD para desarrollar el resto del código: el marcado, el código del lado del cliente, las interacciones del usuario, etc. Mi respuesta es que si tiene el resto aislado y probado, que no vale la pena usar TDD para esto.
Considere: sus páginas deben tener un aspecto particular. ¿Vas a escribir una prueba de unidad fallida para demostrar que estás usando CSS correctamente? ¿Para demostrar que estás usando los estilos CSS correctos? No lo creo.
Para aclarar: en TDD, comenzamos con una prueba de unidad defectuosa. Luego hacemos los cambios más simples posibles que harán que la prueba tenga éxito.
Imagine el uso de TDD para una página web. ¿Qué pruebas fallidas va a producir?
- de prueba está bien formado que la página HTML
- Prueba de que la página incluye el título correcto
- Prueba de que la página incluye
- "Enter ID" etiqueta
- Un cuadro de texto ID
- Una cuadrícula de datos
- Un botón "Ir"
- Compruebe que la cuadrícula de datos esté vacía después de un GET
- Pruebe que la cuadrícula se carga con datos del cliente 1 cuando se ingresa "1" en el cuadro de texto y se hace clic en "Ir".
Y ninguno de los anteriores prueba la apariencia de la página. Nada de esto prueba el comportamiento del lado del cliente de ningún JavaScript en la página.
Creo que es una tontería. En su lugar, pruebe su método DAL que recupera datos basados en la ID. Asegúrese de que devuelve la ID correcta para la identificación 1.Entonces, ¿cuánto tiempo llevará probar manualmente la página para asegurarse de que se ve correcta, puede ingresar el "1" y hacer clic en "Ir", y que los datos que aparecen en la cuadrícula son los datos correctos para el cliente 1?
Test-Driven El desarrollo y las pruebas unitarias automatizadas están destinadas a probar el comportamiento. La interfaz de usuario de un formulario web es en su mayoría declarativa. Aquí hay un gran "desajuste de impedancia".
Entonces, solo para aclarar: separar mi capa de interfaz de usuario de mi lógica comercial. Supongo que tendré que cambiar mis enlaces de datos gridview por otra cosa. ¿Es necesario que todos mis controles se generen en el código? ¿Eso facilitaría la separación? –
Su respuesta ha sido muy esclarecedora. Gracias John. –
Espero que ayude. Por favor, siéntase libre de comentar aquí o hacer otra pregunta si me perdí la base en alguna parte. Puedo imaginar algunos tipos de interacciones de IU complejas en las que TDD podría ser útil, pero serían raras. Si tocas uno, avísanos. –
Puede ejecutar pruebas basadas en HTTP para probar la funcionalidad de alto nivel. Lo mejor sería encapsular el código de código subyacente en su capa de negocio y ejecutar pruebas unitarias en él.
Puede utilizar el marco oficial unittest: http://msdn.microsoft.com/en-us/library/ms182526.aspx
Eso puede ser oficial, pero es una mierda. Asume que estás usando un "proyecto" del sitio web para comenzar, luego procede a fallar por completo en un entorno TDD (que es de lo que se trata esta pregunta). –
En primer lugar, es realmente difícil de probar Web Forms. Pero si divide la lógica en Controladores/Presentadores como el patrón MVC/MVP, al menos puede probar a los presentadores.
Pseudocódigo
Default.aspx
public void Page_Init(object sender, EventArgs e) {
_presenter = new DefaultPresenter(IDependencyOne, IDependencyTwo etc) //Init new presenter, either from IoC container of choose or "new-it-up"
}
public void Save() {
_presenter.Save(txtValue.Text)
}
de lo que puede probar fácilmente el presentador de manera aislada al menos =)
¿Puede darme detalles sobre qué cosas estarían en cada lado de la separación? –
Normalmente, solo dejo que la página se ocupe de la representación de la interfaz de usuario y la transformación de los valores de QueryString/Form/Viewstate y, a continuación, llame al presentador que habla con otros servicios y/o repositorios. –
Estos patrones son una formalización de lo que estaba sugiriendo. Creo que pueden ser agradables como un paradigma de desarrollo, pero creo que sobrepasan un poco la marca en términos de TDD. En mi opinión, el propósito de las pruebas en TDD es crear un código al que le falta un conjunto de errores creando pruebas que demuestren que los errores están ausentes. Creo que una vez que llegas a UI, no vas a tener muchos de esos errores en ningún caso. Los errores que habría tenido se encontrarían mejor mediante el uso de pruebas manuales, tal vez aumentadas por un marco de automatización, pero no TDD y ni siquiera pruebas puramente unitarias. –
- 1. ASP.NET MVC vs Webforms: Sustitución de WebForms Controles
- 2. Cómo mezclar WebForms y MVC en ASP.NET
- 3. Mezclar ASP.NET MVC en ASP.NET WebForms
- 4. ASP.NET MVC o WebForms?
- 5. Combinar ASP.Net MVC con WebForms
- 6. Cómo usar ajax con asp.net webforms
- 7. ASP.NET MVC> ASP.NET WebForms, ¿Por qué?
- 8. Aprenda Asp.Net WebForms o Asp.Net MVC
- 9. asp.net-mvc y webforms coexistentes
- 10. ASP.NET WebForms Dominio de enrutamiento
- 11. Webforms de ASP.NET con jQuery?
- 12. Alternativa de Html.Raw en ASP.NET WebForms
- 13. Alternativas de ViewState en Webforms de ASP.NET
- 14. Tratamiento de excepciones en Webforms de ASP.NET
- 15. Mejores WebForms inspirados en asp.net MVC
- 16. Webforms de Asp.Net V Asp.Net WebSite (Razor) Vs. Asp.Net MVC
- 17. ¿Es posible implementar nuevos estándares como HTML5 en Webforms de ASP.NET?
- 18. TDD con ASP.NET MVC 1.0
- 19. ¿Cómo se especifica su tipo de contenido en ASP.NET WebForms?
- 20. Patrón MVVM para Webforms de ASP.NET?
- 21. ASP.NET MVC + WebForms - Conflicto de ruta
- 22. Desventajas de ASP.net MVC Webforms View Engine?
- 23. Prueba de aplicaciones webforms de ASP.NET
- 24. Webforms Vs Asp.Net MVC VS2010 LoadTest
- 25. Migración de WebForms de ASP.NET a MVC
- 26. ¿ASP.NET MVC está destinado a reemplazar Webforms?
- 27. enrutamientos de asp.net webforms: parámetros opcionales
- 28. ¿Qué es ASP.NET WebForms equivalente a ViewData de ASP.NET MVC
- 29. Sugerencias para migrar de ASP.NET WebForms a ASP.NET MVC?
- 30. Cómo usar enrutamiento ASP.NET 4 WebForms con Query String?
Solo para aclarar, es lo que wa no hacerlo guiado por pruebas desarrollo o solo pruebas unitarias? – alexn
Me gustaría incorporar algo de TDD que también me daría el beneficio adicional de mejores pruebas de unidad, esperaba. –