Pregunta

Actualmente estoy escribiendo una miniaplicación sencilla basada en un temporizador en C# que realiza una acción n veces cada k segundos.
Estoy tratando de adoptar un estilo de desarrollo basado en pruebas, por lo que mi objetivo es realizar pruebas unitarias de todas las partes de la aplicación.

Entonces, mi pregunta es:¿Existe una buena manera de realizar pruebas unitarias de una clase basada en temporizador?

El problema, a mi modo de ver, es que existe un gran riesgo de que las pruebas tarden demasiado en ejecutarse, ya que deben esperar tanto tiempo para que se realicen las acciones deseadas.
Especialmente si uno quiere datos realistas (segundos), en lugar de utilizar la resolución de tiempo mínima permitida por el marco (¿1 ms?).
Estoy usando un objeto simulado para la acción, para registrar la cantidad de veces que se llamó a la acción y para que la acción prácticamente no tome tiempo.

¿Fue útil?

Solución

Lo que hice es simular el temporizador, y también la hora actual del sistema, para que mis eventos pudieran activarse inmediatamente, pero en lo que respecta al código bajo prueba, el tiempo transcurrido fue de segundos.

Otros consejos

Creo que lo que haría en este caso es probar el código que realmente se ejecuta cuando el temporizador avanza, en lugar de toda la secuencia.Lo que realmente necesita decidir es si vale la pena probar el comportamiento real de la aplicación (por ejemplo, si lo que sucede después de cada tick cambia drásticamente de un tick a otro), o si es suficiente (es decir , la acción es la misma cada vez) para probar tu lógica.

Dado que se garantiza que el comportamiento del temporizador nunca cambiará, funcionará correctamente (es decir, lo habrá configurado correctamente) o no;Parece ser un esfuerzo en vano incluir eso en su prueba si en realidad no es necesario.

Estoy de acuerdo con Danny en la medida en que probablemente tenga sentido desde la perspectiva de las pruebas unitarias simplemente olvidarse del mecanismo del temporizador y simplemente verificar que la acción en sí funciona como se esperaba.También diría que no estoy de acuerdo en que es un esfuerzo inútil incluir la configuración del temporizador en un conjunto de pruebas automatizadas de algún tipo.Hay muchos casos extremos cuando se trata de trabajar con aplicaciones de cronometraje y es muy fácil crear una falsa sensación de seguridad probando sólo las cosas que son fáciles de probar.

Recomendaría tener un conjunto de pruebas que ejecuten el cronómetro además de la acción real.Esta suite probablemente tardará un poco en ejecutarse y probablemente no sea algo que ejecutaría todo el tiempo en su máquina local.Pero configurar este tipo de cosas en una compilación automatizada nocturna realmente puede ayudar a eliminar errores antes de que sean demasiado difíciles de encontrar y corregir.

En resumen, mi respuesta a su pregunta es que no se preocupe por escribir algunas pruebas que tardan mucho en ejecutarse.Pruebe lo que pueda y haga que ese conjunto de pruebas se ejecute rápido y con frecuencia, pero asegúrese de complementarlo con pruebas de integración que se ejecuten con menos frecuencia pero que cubran más de la aplicación y su configuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top