TDD (Разработка через тестирование) — это методология разработки программного обеспечения, при которой тесты пишутся до реализации кода, а сам процесс следует строгому циклу.
// Пример цикла TDD для класса Calculator
// 1. Красная фаза (тест падает)
public function testAddReturnsSumOfTwoNumbers(): void
{
$calculator = new Calculator();
$this->assertEquals(5, $calculator->add(2, 3));
}
// 2. Зеленая фаза (минимальная реализация)
class Calculator
{
public function add(int $a, int $b): int
{
return 5; // "Читерская" реализация
}
}
// 3. Новый тест для обобщения
public function testAddReturnsCorrectSumForDifferentInputs(): void
{
$calculator = new Calculator();
$this->assertEquals(7, $calculator->add(4, 3));
}
// 4. Реальная реализация
class Calculator
{
public function add(int $a, int $b): int
{
return $a + $b;
}
}
// Тест для сервиса отправки email
public function testSendWelcomeEmail(): void
{
$mailer = $this->createMock(Mailer::class);
$mailer->expects($this->once())
->method('send')
->with('user@example.com', 'Добро пожаловать!');
$service = new UserService($mailer);
$service->register('user@example.com');
}
TDD — это не просто "тесты сначала", а целая философия разработки, приводящая к более продуманной архитектуре и надежному коду. Хотя начальное внедрение требует дисциплины, долгосрочные преимущества многократно окупают затраченные усилия.