[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-chto-takoe-tdd-i-bdd-chem-oni-otlichayutsya":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},710,"chto-takoe-tdd-i-bdd-chem-oni-otlichayutsya",16,"spring-test","Spring Test","🧪","Что такое TDD и BDD? Чем они отличаются?","TDD (Test-Driven Development) — разработка через тестирование, методология, в которой тесты пишутся до реализации кода. BDD (Behavior-Driven Development) — расширение TDD, фокусирующееся на описании поведения системы с точки зрения бизнеса.\n\n### Цикл TDD (Red-Green-Refactor)\n\n1. **Red** — написать тест, который не проходит (реализации ещё нет)\n2. **Green** — написать минимальный код, чтобы тест прошёл\n3. **Refactor** — улучшить код, не меняя поведение, убедившись, что тесты проходят\n\n\u003Cdetails>\u003Csummary>Пример цикла TDD\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Шаг 1 (Red): пишем тест\n@Test\nvoid shouldCalculateDiscount() {\n    PriceCalculator calculator = new PriceCalculator();\n    BigDecimal result = calculator.calculatePrice(new BigDecimal(\"1500\"));\n    assertEquals(new BigDecimal(\"1350.00\"), result);\n}\n\n\u002F\u002F Шаг 2 (Green): минимальная реализация\npublic class PriceCalculator {\n    public BigDecimal calculatePrice(BigDecimal amount) {\n        if (amount.compareTo(new BigDecimal(\"1000\")) > 0) {\n            return amount.multiply(new BigDecimal(\"0.90\"))\n                         .setScale(2, RoundingMode.HALF_UP);\n        }\n        return amount;\n    }\n}\n\n\u002F\u002F Шаг 3 (Refactor): улучшаем код\npublic class PriceCalculator {\n    private static final BigDecimal DISCOUNT_THRESHOLD = new BigDecimal(\"1000\");\n    private static final BigDecimal DISCOUNT_RATE = new BigDecimal(\"0.10\");\n\n    public BigDecimal calculatePrice(BigDecimal amount) {\n        if (amount.compareTo(DISCOUNT_THRESHOLD) > 0) {\n            BigDecimal discount = amount.multiply(DISCOUNT_RATE);\n            return amount.subtract(discount).setScale(2, RoundingMode.HALF_UP);\n        }\n        return amount;\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### BDD — формат Given-When-Then\n\n```java\n@Nested\n@DisplayName(\"Оформление заказа\")\nclass OrderPlacement {\n\n    @Test\n    @DisplayName(\"Учитывая корзину с товарами, когда пользователь оформляет заказ, тогда заказ создаётся\")\n    void givenCartWithItems_whenPlaceOrder_thenOrderIsCreated() {\n        \u002F\u002F Given (Дано)\n        Cart cart = new Cart();\n        cart.addItem(new Product(\"Книга\", new BigDecimal(\"500\")));\n        cart.addItem(new Product(\"Ручка\", new BigDecimal(\"50\")));\n\n        \u002F\u002F When (Когда)\n        Order order = orderService.placeOrder(cart, user);\n\n        \u002F\u002F Then (Тогда)\n        assertThat(order).isNotNull();\n        assertThat(order.getStatus()).isEqualTo(OrderStatus.CREATED);\n        assertThat(order.getTotalAmount()).isEqualByComparingTo(\"550\");\n    }\n}\n```\n\n### BDD-стиль с Mockito (BDDMockito)\n\n```java\nimport static org.mockito.BDDMockito.*;\n\n@Test\nvoid shouldProcessPayment() {\n    \u002F\u002F Given\n    given(paymentGateway.charge(any(PaymentRequest.class)))\n        .willReturn(new PaymentResponse(true, \"txn-123\"));\n\n    \u002F\u002F When\n    PaymentResult result = paymentService.processPayment(order);\n\n    \u002F\u002F Then\n    then(paymentGateway).should().charge(any(PaymentRequest.class));\n    assertThat(result.isSuccessful()).isTrue();\n}\n```\n\n### Основные различия\n\n| Критерий | TDD | BDD |\n|---|---|---|\n| Фокус | Корректность кода | Поведение системы |\n| Формат | Test -> Implement -> Refactor | Given -> When -> Then |\n| Терминология | Test, Assert | Specification, Should, Given\u002FWhen\u002FThen |\n| Целевая аудитория | Разработчики | Разработчики, QA, бизнес |\n| Инструменты | JUnit, Mockito | JUnit + BDDMockito, Cucumber, Spock |\n| Уровень | Юнит-тесты | Юнит и приёмочные тесты |\n\n> **На собеседовании:** важно объяснить цикл Red-Green-Refactor для TDD и формат Given-When-Then для BDD. Частая ошибка — считать, что BDD заменяет TDD. На самом деле BDD — это расширение TDD с фокусом на бизнес-поведение.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое TDD и BDD? Чем они отличаются? — Gymterview","TDD (Test-Driven Development) — разработка через тестирование, методология, в которой тесты пишутся до реализации кода. BDD (Behavior-Driven Development) — расш","TDD (Test-Driven Development) — разработка через тестирование, методология, в которой тесты пишутся до реализации кода. ",[7,13],"TDD (Test-Driven Development) — разработка через тестирование, методология, в которой тесты пишутся до реализации кода. BDD (Behavior-Driven Development) — расширение TDD, фокусирующееся на описании поведения системы с точки зрения бизнеса.",true]