Проект: Тестирование Ruby с использованием RSpec

Не забывайте использовать Git для фиксации изменений в ваших проектах!

На разогрев: Путешествие во времени

Хороший способ познакомиться с проектом и сделать в него свой вклад - это написать для него тесты. Также это лучший путь изучить его код, что бывает необходимо в начале работы. И очень часто тестовый код занимает в два раза больше места, чем реальный код в проекте!

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

Задания

  1. Вернитесь к Проекту "Строительные блоки" и напишите тесты для вашего "Caesar's Cipher". Там будет не более полудюжины тестов для покрытия всего кода. Вы помните как использовать $ rake для выполнения тестов?
  2. Вернитесь к Проекту "Продвитутые строительные блоки" и создайте тесты для любого из написанных вами 6 методов. Сделайте несколько вариантов ввода данных для каждой функции - тесты должны показать, что они работоспособны. Проверьте, что тесты максимально покрывают граничные случаи.
  3. Напишите тесты для Проекта "ООП". Здесь уже посложнее, чем просто изменить метод ввода и проверить, что методы возвращают корректный результат. Необходимо, чтобы тесты определяли, что победа или проигрыш определены верно.
    1. Начните с определения того момента, когда игрок должен выиграть. Например, когда на поле в верхнем ряду содержится X X X, то должен сработать метод #game-over (или его аналог).
    2. Протестируйте все важные методы на предмет их работоспособности и поведения в граничных случаях.
    3. Попробуйте mocks/doubles для того, чтобы изолировать методы и быть уверенными в том, что они выдают верные результаты.

Решения студентов

Проект: TDD "Четыре в ряд"

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

Правила игры достаточно просты, реализация будет для командной строки, аналогично предыдущим играм. Если вы хотите оживить игру, то значки фишек можно взять из символов Юникод. Исходя из вашего уровня подготовки, это не должно затруднить вас.

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

Пишите только то количество кода, которое необходимо для успешного выполнения теста. Зачастую, придется сделать два теста, чтобы какой-нибудь метод делал что-то полезное - это нормально. Может показаться, что работа избыточна, но в этом и есть смысл этого урока. Ваши мысли будут примерно следующими: "Хорошо, надо реализовать эту возможность в программе. Как ее протестировать? Так, написал тест, как теперь написать код? Теперь написал код, как мне сделать его лучше?". Вы проведете некоторое время в Google, пытаясь найти ответы на вопрос "Как лучше протестировать ту или иную часть функционала". Это также нормально... Сейчас вы изучаете RSpec а не Ruby, и должны немного освоиться в нем.

Задания

  1. Создайте игру! Сделайте это по принципу TDD.

Решения студентов

Дополнительные ресурсы

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

Поделиться уроком: