Недавно я написал программу на Ruby для поиска решений мозаичной головоломки "Scramble Squares" :
Я использовал TDD для реализации большей части, что привело к тестам, которые выглядели следующим образом:
it "has top, bottom, left, right" do
c = Cards.new
card = c.cards[0]
card.top.should == :CT
card.bottom.should == :WB
card.left.should == :MT
card.right.should == :BT
end
Это хорошо работало для низкоуровневых «вспомогательных» методов: определение «сторон» тайла, определение того, можно ли правильно разместить тайл в сетке и т. Д.
Но я столкнулся с проблемой при кодировании реального алгоритма решить загадку. Поскольку я не знал возможных возможных решений проблемы, я не знал, как сначала написать тест.
В итоге я написал довольно уродливый, непроверенный алгоритм для его решения:
def play_game
working_states = []
after_1 = step_1
i = 0
after_1.each do |state_1|
step_2(state_1).each do |state_2|
step_3(state_2).each do |state_3|
step_4(state_3).each do |state_4|
step_5(state_4).each do |state_5|
step_6(state_5).each do |state_6|
step_7(state_6).each do |state_7|
step_8(state_7).each do |state_8|
step_9(state_8).each do |state_9|
working_states << state_9[0]
end
end
end
end
end
end
end
end
end
Итак у меня вопрос: как вы используете TDD для написания метода, когда вы еще не знаете действительные результаты?
Если вам интересно, код на GitHub: