¿Qué debe probar al crear una aplicación web relativamente compleja?

Editar:

Su enfoque de abajo hacia arriba para las pruebas unitarias es tan válido como mi enfoque de arriba hacia abajo, siempre que no comience demasiado pequeño. Si tiene pruebas funcionales automatizadas, no debería necesitar probar el método que utiliza otros métodos que ha probado.

————————-

¡Hay tantas formas de probar tu aplicación! La cuestión de cuándo comenzar a escribir exámenes es en realidad relativamente fácil, la cuestión de cuándo parar puede ser mucho más difícil, como mencionaste.

Deberá comenzar a escribir pruebas tan pronto como comience a escribir su código. (Si desea escribir pruebas, si es un código desechable para una prueba de concepto o una demostración, no se moleste).

Entonces, ¿para qué escribes las pruebas? No hay regla de corte y secado. Obviamente, no pierdas el tiempo escribiendo pruebas que prueban captadores y establecedores y otros métodos simples. Comenzaría a escribir en ese nivel del método que llama a otros métodos. Si sus pruebas fallan en ese nivel, puede ser apropiado escribir pruebas para algunos de los métodos llamados más complejos. Si va más allá de esos 2 o 3 niveles de escritura profunda, sus pruebas consideren si hay una manera de refactorizar.

La otra cosa que me gusta hacer desde el principio es escribir pruebas funcionales automatizadas usando una herramienta como Cucumber. El beneficio de esto es que prueba en un nivel de recuadro negro (o recuadro blanco si lo desea), puede escribir sus características en un lenguaje sencillo que los propietarios de los productos pueden leer y aceptar que es lo que quieren que haga una característica, y usted puede refactorizar el código debajo de todo lo que desee sin preocuparse demasiado por romper las pruebas.

Se atan a la interfaz de usuario, pero si se escriben correctamente, generalmente solo se trata de cambiar algunas cadenas cuando se cambian los elementos de la interfaz de usuario.

Escribe una prueba para una historia de usuario cuando implementa esa historia de usuario y en poco tiempo tiene un conjunto completo de pruebas automatizadas funcionales que puede ejecutar regularmente en su código para informarle en cualquier momento que algo se rompa.

No podrá probar cada cosa con una prueba automatizada. No se moleste en intentarlo, deje las pruebas más difíciles para humanos, pero use pruebas automatizadas como una regresión de línea de base automática.

Hay muchas más consideraciones relacionadas con el aislamiento de la unidad bajo prueba, etc., pero si escribe pruebas unitarias de alto nivel para todo lo que sea práctico y pruebas automatizadas funcionales para la mayoría de los criterios de aceptación de sus historias de usuario, le servirá muy bien durante mucho tiempo. término.

Una nota: al principio parecerá que se necesita demasiado esfuerzo para crear las pruebas. Síguelo. Si espera que su aplicación tenga una vida útil significativa, esto dará sus frutos en dividendos más adelante.

Personalmente, creo que el enfoque de arriba hacia abajo tiene una recompensa mucho mejor. Si no tiene tiempo, al menos se asegura de que los servicios de nivel superior más importantes estén cubiertos. Cuando tiene más tiempo, siempre puede profundizar.

Con lo anterior en mente, diré

1. Comience probando los servicios de dominio expuestos a través de sus modelos de dominio de más alto nivel.

2. Si tiene bibliotecas de utilidades, asegúrese de tener pruebas para ellas también, nuevamente trate estas bibliotecas de utilidades como una API o servicio.

3. Entonces probablemente escribiré algunas pruebas para la lógica de la aplicación principal, si está usando algo como mvc, esa sería la lógica del controlador.

4. Y si realmente tiene tiempo, entonces quizás también escriba algunas pruebas para la vista, aunque esto probablemente sea propenso a cambios.

El beneficio real de escribir pruebas no será evidente en un sistema pequeño. Pero a medida que crece su base de código, estas pruebas le darán confianza en que el sistema aún funciona.

Lo último que quiero decir es que ninguna cantidad de prueba escrita puede sustituir un buen diseño. Por lo tanto, familiarizarse con los principios SÓLIDOS es bastante importante, especialmente si utiliza .net y java. Pero me imagino que esto es probablemente lo mismo para otros idiomas también.