Test-Driven Development (TDD) — это методология разработки программного обеспечения, при которой тесты пишутся до реализации кода. Это принципиально меняет подход к программированию, делая его более структурированным и предсказуемым.
TDD строится на трех повторяющихся этапах:
Красный
: Написание теста для еще несуществующей функциональностиЗеленый
: Реализация минимального рабочего кода, чтобы тест прошелРефакторинг
: Улучшение кода без изменения его поведенияДопустим, мы хотим реализовать метод factorial
:
# 1. Красная фаза (тест падает)
describe '#factorial' do
it 'returns 1 for 0' do
expect(factorial(0)).to eq(1)
end
end
# 2. Зеленая фаза (минимальная реализация)
def factorial(n)
1
end
# 3. Добавляем следующий тест
it 'returns 120 for 5' do
expect(factorial(5)).to eq(120)
end
# 4. Полная реализация
def factorial(n)
(1..n).reduce(1, :*)
end
Используйте правильные инструменты:
Пишите изолированные тесты:
# Плохо
it 'creates user and sends email' do
# тестирует две разные вещи
end
# Хорошо
it 'creates user' do
# ...
end
it 'sends welcome email' do
# ...
end
Тестируйте поведение, а не реализацию:
# Плохо
it 'calls .save on user' do
expect(user).to receive(:save)
# ...
end
# Хорошо
it 'persists user to database' do
expect { create_user }.to change(User, :count).by(1)
end
Резюмируем: TDD — это мощная методология, которая при правильном применении значительно повышает качество кода. В Ruby она особенно эффективна благодаря развитой экосистеме инструментов тестирования. Начинайте с малого, соблюдайте цикл "красный-зеленый-рефакторинг", и вы быстро ощутите преимущества этого подхода.