Gymterview
middle

Что такое TDD и BDD?

TDD (Test-Driven Development) – методология разработки, при которой тесты пишутся до кода. BDD (Behavior-Driven Development) – расширение TDD с фокусом на поведение системы, описанное бизнес-языком в формате Given-When-Then.

Цикл TDD: Red-Green-Refactor

Пример
1. RED      -- написать failing test
2. GREEN    -- написать минимальный код, чтобы тест прошёл
3. REFACTOR -- улучшить код, не ломая тесты

Пример TDD

Пример
// Шаг 1: RED -- тест для несуществующего метода
@Test
void shouldCalculateDiscount() {
    PricingService service = new PricingService();
    assertEquals(90.0, service.applyDiscount(100.0, 10)); // метода ещё нет
}

// Шаг 2: GREEN -- минимальная реализация
public double applyDiscount(double price, int percent) {
    return price * (100 - percent) / 100;
}

// Шаг 3: REFACTOR -- улучшаем, тест остаётся зелёным

BDD: Given-When-Then

Пример
@Test
@DisplayName("Когда применяется скидка 10%, цена уменьшается на 10%")
void discountScenario() {
    // Given -- начальное состояние
    var pricing = new PricingService();
    double originalPrice = 100.0;

    // When -- действие
    double discountedPrice = pricing.applyDiscount(originalPrice, 10);

    // Then -- ожидаемый результат
    assertThat(discountedPrice).isEqualTo(90.0);
}

Сравнение TDD и BDD

Критерий TDD BDD
Фокус Корректность кода Поведение системы
Язык Технический Бизнес-язык
Формат Тест -> Код -> Рефакторинг Given-When-Then
Участники Разработчики Разработчики + бизнес
Инструменты JUnit, TestNG Cucumber, JBehave

Ключевые принципы

  • TDD заставляет думать о дизайне API до реализации – код получается тестируемым
  • BDD Given-When-Then – универсальная структура любого теста, даже без формального BDD
  • Mockito BDD: given(mock.method()).willReturn(value) + then(mock).should().method()

Частые ошибки

  • TDD для всего – для тривиального CRUD overhead превышает пользу
  • Слишком детальные тесты – тест привязан к реализации, рефакторинг ломает тесты
  • BDD без участия бизнеса – Given-When-Then полезен как формат, но полноценный BDD подразумевает Cucumber + бизнес-аналитиков

Как используется в 2026

  • Given-When-Then – стандартная структура тестов даже без формального BDD
  • TDD применяется точечно для сложной бизнес-логики, алгоритмов, edge cases
  • Cucumber/Gherkin – для acceptance-тестов с участием non-technical stakeholders

На собеседовании: интервьюер хочет услышать цикл Red-Green-Refactor для TDD и формат Given-When-Then для BDD. Частая ошибка – сказать, что TDD это “просто писать тесты” без упоминания цикла, или спутать BDD с обычным тестированием.