Soy bastante nuevo en TDD y tengo problemas al crear mi primera prueba cuando aparece antes de cualquiera de los códigos de implementación. Sin ningún marco para el código de implementación, soy libre de escribir mi primera prueba como quiera, pero siempre parece salir manchada por mi forma de pensar Java / OO sobre el problema.
Por ejemplo, en mi Github ConwaysGameOfLifeExample la primera prueba que escribí (rule1_zeroNeighbours) Comencé creando un objeto GameOfLife que no tenía ' Se ha implementado todavía; se llamó un método de conjunto que no existía, un método de paso que no existía, un método de obtención que no existía y luego se usó un aserto.
Las pruebas evolucionaron a medida que escribía más pruebas y volví a redactarlas, pero originalmente parecía algo como esto:
@Test
public void rule1_zeroNeighbours()
{
GameOfLife gameOfLife = new GameOfLife();
gameOfLife.set(1, 1, true);
gameOfLife.step();
assertEquals(false, gameOfLife.get(1, 1));
}
Me sentí extraño porque estaba forzando el diseño de la implementación en función de cómo había decidido en esta etapa temprana escribir esta primera prueba.
De la forma en que entiendes TDD, ¿está bien? Parece que estoy siguiendo los principios de TDD / XP en el sentido de que mis pruebas e implementación evolucionaron a lo largo del tiempo con la refactorización, por lo que si este diseño inicial hubiera resultado inútil, habría estado abierto al cambio, pero parece que estoy forzando una dirección en el solución comenzando de esta manera.
¿De qué otra manera las personas usan TDD? Podría haber pasado por más iteraciones de refactorización al comenzar sin un objeto GameOfLife, solo primitivos y métodos estáticos, pero eso parece demasiado artificial.