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 с обычным тестированием.