Приемочные испытания для тетриса при использовании Test Driven Development - PullRequest
6 голосов
/ 24 июля 2010

Я хочу попробовать реализовать игру «Тетрис» с использованием TDD.

Из того, что я понял, прочитав Растущее объектно-ориентированное программное обеспечение, руководствуясь тестами , я должен начать с определения того, какими будут мои приемочные тесты. Если я прав, приемочные тесты при выполнении TDD определяются так же, как и варианты использования.

Очень важно определить хороший первый приемочный тест, который будет работать как «скелет» приложения, поэтому он должен быть простым.

Я выбрал следующие 2 приемочных теста как первый для реализации:

  1. Игра начинается, и Игрок закрывает ее.
  2. Игра начинается, и игрок ничего не делает. В конце концов он проигрывает.

Являются ли эти 2 приемочных испытания хорошими начальными испытаниями? Что было бы хорошо на следующих приемочных испытаниях? Я мог бы придумать что-то вроде

  • Игра начинается, и выпадают только квадратные фигуры. Игрок помещает их все таким образом, чтобы линии всегда «взрывались», и игра после 100 игровых шагов все еще не заканчивалась.

но я чувствую, что это немного неловко, так как в реальной игре тетрис у вас всегда будут падать разные фигуры, и именно об этом должно быть приемочное тестирование.

Кроме того, я испытываю соблазн просто попытаться реализовать все за один раз, выполняя (2), что, я думаю, вовсе не притворяется при реализации второго Приемочного теста. Думаю, идея заключалась бы в том, чтобы игра была реализована только после 6-7 из них, а не на втором. Я прав?

Спасибо

Ответы [ 3 ]

3 голосов
/ 24 июля 2010

Сначала я бы подумал об игровом поле и о том, как оно выглядит после того, как пропало несколько кадров с некоторыми определенными блоками.Например, используя Cucumber :

Scenario: dropping the first square
  Given an empty 10x2 field

  When a square is dropped at column 4
  And 48 frames have passed

  Then the field should contain a square at (4, 1)

  When 48 frames have passed
  Then the field should contain a square at (4, 2)

Scenario: Dropping a square on a full stack
  Given an empty 10x2 field
  And a square at (4, 2)

  When a square is dropped at column 4
  And 48 frames have passed

  Then the game should be over

Если вам нравится внешний вид спецификаций функций Cucumber, вы можете попробовать Cuke4Nuke для .Net или Cuke4Duke для Java.

2 голосов
/ 24 июля 2010

Вы захотите удалить случайность, которая принадлежит вашей игре, из ваших тестов.Да, это означает, что тест не идеально дублирует игру, но это также означает, что у вас есть повторяющиеся тесты, и это имеет большую ценность.Выделите различия - передайте PieceProvider в свою игру;для реальной игры передайте RandomPieceProvider, а для испытаний - в SpecifiedPieceProvider.Теперь между ними есть небольшая разница, но разница должна быть настолько малой, чтобы не иметь значения;Вы все еще можете проверить все остальные аспекты игры с уверенностью.

0 голосов
/ 24 июля 2010

Начните с простого списка блоков.Предполагая, что нет игрока, блоки будут складываться определенным образом, а затем перетекать.Ваш тест не пройден, если блоки не складываются правильно или программа не обнаруживает переполнение.

...