Esta prueba consiste en una interfaz y verifica que la interfaz expone un captador booleano llamado IsRunning
.
Esta prueba probablemente se escribió antes de que existiera el interface
, y probablemente mucho antes de que existieran clases concretas de IGame
. Me imagino que, si el proyecto es de alguna madurez, existen otras pruebas que ejercen las implementaciones reales y verifican el comportamiento para ese nivel, y probablemente usan la burla en el contexto aislacionista más tradicional en lugar de anotar las formas teóricas.
El valor de este tipo de pruebas es que obliga a pensar cómo se va a utilizar una forma u objeto. Algo así como "No sé exactamente qué va a hacer un juego todavía, pero sí sé que voy a querer comprobar si se está ejecutando ...". Por lo tanto, este estilo de prueba es más para impulsar las decisiones de diseño, así como para validar el comportamiento.
No es la prueba más valiosa del planeta, pero cumple su función en mi opinión.
Editar: Yo estaba en el tren anoche cuando estaba escribiendo esto, pero quería dirigirme a Andrew Whitaker para comentar directamente en la respuesta.
Se podría argumentar que la firma en la interfaz en sí es suficiente para hacer cumplir el contrato deseado. Sin embargo, esto realmente depende de cómo trate sus interfaces y, finalmente, de cómo valide el sistema que está tratando de probar.
Puede haber un valor tangible al declarar explícitamente esta funcionalidad como una prueba. Está verificando explícitamente que esta es una funcionalidad deseada para un IGame
.
Tomemos un caso de uso, digamos que como diseñador sabe que quiere exponer un getter público para IsRunning
, por lo que lo agrega a la interfaz.Pero digamos que otro desarrollador obtiene esto y ve una propiedad, pero no ve ningún uso de ella en ningún otro lugar en el código, se puede suponer que es elegible para eliminación (o eliminación de eliminación de código, que normalmente es algo bueno)) sin daño La existencia de esta prueba, sin embargo, establece explícitamente que esta propiedad debería existir.
Sin esta prueba, un desarrollador podría modificar la interfaz, abandonar la implementación y el proyecto aún se compilaría y ejecutaría aparentemente correctamente. Y sería hasta mucho después que alguien note que la interfaz ha cambiado.
Con esta prueba, aunque parezca que nadie está usándola, su conjunto de pruebas fallará. La naturaleza autodocumentada de la prueba indica que ShouldReturnGameIsRunning()
, que al menos debe engendrar una conversación si IGame
realmente expone un getter IsRunning
.
Por lo general, no son restos este sentido. – sarnold
Tienes dos cosas diferentes en juego en esta pregunta: "¿Cuál es el propósito de TDD?" y "¿Cuál es el objetivo de esta prueba?" - Tenga cuidado de mantener los dos separados en su propia cabeza. El valor (o no) de TDD no puede juzgarse de manera justa a partir de una única prueba (posiblemente deficiente). – Bevan
Ojalá pudiera cerrar esto como un duplicado de http://stackoverflow.com/questions/tagged/tdd?sort=votes&pagesize=50 –