[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-testirovanie-chto-takoe-integratsionnoe-testirovanie":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":16,"progress":17,"seo":18},1285,"chto-takoe-integratsionnoe-testirovanie",42,"testirovanie","Тестирование","✅","Что такое интеграционное тестирование?","Интеграционное тестирование -- проверка взаимодействия нескольких компонентов системы: приложение + БД, приложение + внешний API, несколько сервисов вместе.\n\n> **Аналогия из жизни:** после того как каждая деталь проверена отдельно (unit), их собирают вместе и проверяют, что механизм работает в сборке -- передачи переключаются, двигатель крутит колёса.\n\n### Отличие от unit-тестов\n\n| Критерий | Unit-тест | Интеграционный тест |\n|----------|----------|-------------------|\n| Зависимости | Замокированы | Реальные (БД, API) |\n| Скорость | Миллисекунды | Секунды |\n| Что проверяет | Логику метода | Взаимодействие компонентов |\n| Инфраструктура | Не нужна | Нужна (БД, контейнеры) |\n\n### Пример с Testcontainers\n\n\u003Cdetails>\n\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@SpringBootTest\n@Testcontainers\nclass OrderRepositoryIT {\n\n    @Container\n    static PostgreSQLContainer\u003C?> postgres = new PostgreSQLContainer\u003C>(\"postgres:16\");\n\n    @DynamicPropertySource\n    static void configureProperties(DynamicPropertyRegistry registry) {\n        registry.add(\"spring.datasource.url\", postgres::getJdbcUrl);\n        registry.add(\"spring.datasource.username\", postgres::getUsername);\n        registry.add(\"spring.datasource.password\", postgres::getPassword);\n    }\n\n    @Autowired\n    private OrderRepository orderRepository;\n\n    @Test\n    void shouldSaveAndFindOrder() {\n        Order order = new Order(\"product-1\", BigDecimal.valueOf(99.99));\n        orderRepository.save(order);\n\n        Optional\u003COrder> found = orderRepository.findById(order.getId());\n        assertThat(found).isPresent();\n        assertThat(found.get().getProductId()).isEqualTo(\"product-1\");\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Ключевые принципы\n\n- Интеграционные тесты дороже unit-тестов -- запускайте их реже (CI pipeline)\n- Testcontainers -- стандарт для интеграционных тестов с БД, Kafka, Redis\n- `@SpringBootTest` поднимает полный Spring Context -- медленно; используйте слайсы (`@DataJpaTest`, `@WebMvcTest`)\n\n### Частые ошибки\n\n- H2 вместо реальной БД -- синтаксис и поведение отличаются; тесты проходят, production падает\n- Общая БД между тестами -- данные одного теста влияют на другой; используйте `@Transactional` или очистку\n- Слишком много интеграционных тестов -- медленный CI; придерживайтесь пирамиды тестирования\n\n### Как используется в 2026\n\n- Testcontainers + реальная БД -- стандарт, H2 для интеграционных тестов считается anti-pattern\n- Spring Boot слайсы (`@DataJpaTest`, `@WebMvcTest`) -- быстрее полного `@SpringBootTest`\n\n> **На собеседовании:** интервьюер хочет услышать, чем интеграционный тест отличается от unit-теста, и когда что применять. Частая ошибка -- не упомянуть Testcontainers и сказать, что для интеграционных тестов используется H2.","","junior",[15],"testing",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое модульное тестирование? — Gymterview","Модульное (unit) тестирование -- проверка корректности отдельных модулей (классов, методов) в изоляции от внешних зависимостей, которые заменяются моками или ст","Модульное (unit) тестирование -- проверка корректности отдельных модулей (классов, методов) в изоляции от внешних зависи",[15,13],"Модульное (unit) тестирование -- проверка корректности отдельных модулей (классов, методов) в изоляции от внешних зависимостей, которые заменяются моками или стабами.",true]