Пасьянс TDD Spider - PullRequest
       7

Пасьянс TDD Spider

2 голосов
/ 07 января 2009

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

Не могли бы вы привести несколько простых примеров TDD, если бы вы запрограммировали хорошо известный Пасьянс Паук, который поставляется с Windows Vista? С каких тестов вы бы начали?

Ответы [ 4 ]

3 голосов
/ 07 января 2009

Ну, когда вы спрашиваете о TDD для пасьянса паука, вы в основном спрашиваете о том, как разработать такую ​​игру. Испытания станут следствием проектных решений. Пасьянс - простая игра, но разработка такой игры с нуля не тривиальна (есть несколько способов сделать это).

Возможно, вы захотите начать с чего-то гораздо более простого по дизайну, например, игры с угадыванием чисел (когда система генерирует случайное число, а вы пытаетесь угадать его как можно меньше попыток).

Некоторые особенности такой простой игры:

  1. Функция генерирования секретного номера случайным образом от 1 до 10. Генерация нового номера запускает новую игру.
  2. Функция для сравнения того, является ли вход игрока выше или ниже, чем это число, или если предположение верно на
  3. Функция подсчета количества догадок

Исходя из этого, вы можете попробовать эти тесты (просто как грубые примеры, но легко кодируемые):

  1. Запустите свой генератор 1000 раз. Убедитесь, что secret_number >= 1 && secret_number <= 10 каждый раз.
  2. Для выборочного набора чисел (генерируемых случайным образом) ваша функция сравнения возвращает "ВЫСОКИЙ", когда number > secret_number, "НИЗКИЙ", когда number < secret_number, и "WIN", когда number == secret_number?
  3. Повторите предыдущий тест, но отследите количество предметов, которые вы тестируете. Когда возвращается «WIN», убедитесь, что ваш счетчик соответствует количеству элементов вашего теста.

Это просто очень грубый набросок, и ни в коем случае не полный. Но из английских описаний видно, что примеры кода были бы еще более подробными. Я думаю, что если вы хотите получить более конкретные ответы, вы должны задать более конкретный вопрос.

3 голосов
/ 07 января 2009

В пасьянсах используются карты.

Итак, вы думаете о классе карты. Вы пишете несколько тестов для отдельных объектов Карты. Вы пишете класс карты для прохождения тестов.

Вам нужна колода, которая тасует и раздает в макете. Вы думаете о классе Deck и алгоритме shuffle и о том, как он поддерживает состояние для игры. Вы пишете несколько тестов для колоды, которая тасует и раздает. Вы пишете свой класс Deck для прохождения тестов. [Примечание: для этого требуется фиктивный генератор случайных чисел, который на самом деле не является случайным.]

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

Итак, вы думаете о классе Layout с пробелами для карточек. Вы пишете несколько тестов для макета и кладете в разные карты. Вы пишете свой класс Layout для прохождения тестов.

Тогда есть правила относительно того, какие карты можно перемещать из макета. Целые колоды, субстеки, топ-карты, что угодно. У вас есть AllowedMove или GameState или какой-то такой класс. Та же тренировка. Определите, что он делает, напишите тесты, закончите урок.

У вас есть пользовательский интерфейс и отображение материала. Дрель такая же.

  1. Грубый класс.

  2. Определить тесты.

  3. Завершить занятие.

и т.д.

Я подробно расскажу об этом в книге по OO Design .

2 голосов
/ 07 января 2009

Сначала вы должны отделить графический интерфейс от двигателя . TDDing GUI - самая сложная часть, поэтому вы должны держать свой слой GUI настолько тонким, насколько можете. Google для "скромного диалогового окна" и прочитайте список tddui на Yahoo! группы .

Слой движка будет реализовывать правила игры. Я не уверен, чем отличается пасьянс Паук от древнего пасьянса (то есть от Windows 3.1), на котором я основал следующее:

Вот начальный список тестов, с которого я начну:

  • вы всегда можете переместить карту в пустой стек
  • карта имеет значение, и ее можно сравнить с картами
  • вы можете переместить карту в непустую стопку, только если карта сверху находится ниже перемещенной карты
  • Вы всегда можете переместить несколько карт в пустую стопку
  • Вы можете перемещать несколько карт в непустую стопку, только если верхняя карта ниже перемещенной карты
  • когда вы перемещаете все перевернутые карты из колоды, верхняя карта может быть возвращена (или должна быть возвращена автоматически?)
  • вы можете взять первую карту из дока и положить в любой стек (?)

Я не уверен в правилах, но думаю, этого достаточно, чтобы понять идею.

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

0 голосов
/ 07 января 2009
  1. перечислить особенности пасьянса паука [я не играю в карточные игры]
  2. опишите, как вы будете тестировать каждую функцию
  3. сделай это
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...