Я довольно новичок в TDD, и у меня возникают проблемы при создании моего первого теста, когда он предшествует любому из кода реализации. Без какой-либо основы для кода реализации я могу написать свой первый тест, как бы мне этого ни хотелось, но он всегда кажется испорченным моим подходом к проблеме Java / OO.
Например, в моем Github ConwaysGameOfLifeExample первый тест, который я написал (rule1_zeroNeighbours), я начал с создания объекта GameOfLife, который еще не был реализован; вызывал метод set, который не существует, метод step, который не существовал, метод get, который не существовал, а затем использовал assert.
Тесты развивались, когда я писал больше тестов и проводил рефакторинг, но изначально это выглядело примерно так:
@Test
public void rule1_zeroNeighbours()
{
GameOfLife gameOfLife = new GameOfLife();
gameOfLife.set(1, 1, true);
gameOfLife.step();
assertEquals(false, gameOfLife.get(1, 1));
}
Это было странно, так как я заставлял проект реализации основываться на том, как я решил на этом раннем этапе написать этот первый тест.
Насколько вы понимаете, TDD это нормально? Кажется, я следую принципам TDD / XP, так как мои тесты и реализация со временем эволюционировали благодаря рефакторингу, и поэтому, если бы этот первоначальный проект оказался бесполезным, его можно было бы изменить, но мне кажется, что я навязываю направление Решение, начав таким образом.
Как еще люди используют TDD? Я мог бы пройти через итерацию рефакторинга, начав без объекта GameOfLife, только примитивов и статических методов, но это кажется слишком надуманным.