[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-testirovanie-chto-takoe-testcontainers-i-zachem-oni-nuzhny":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},1293,"chto-takoe-testcontainers-i-zachem-oni-nuzhny",42,"testirovanie","Тестирование","✅","Что такое Testcontainers и зачем они нужны?","Testcontainers -- Java-библиотека для запуска Docker-контейнеров в тестах. Позволяет тестировать с реальными БД, брокерами сообщений, кэшами вместо in-memory заглушек.\n\n> **Аналогия из жизни:** вместо того чтобы репетировать речь перед зеркалом (H2 in-memory), вы выступаете перед небольшой реальной аудиторией (настоящая PostgreSQL в контейнере). Обратная связь гораздо ближе к реальности.\n\n### Пример\n\n\u003Cdetails>\n\u003Csummary>Полный пример с PostgreSQL\u003C\u002Fsummary>\n\n```java\n@SpringBootTest\n@Testcontainers\nclass UserServiceIT {\n\n    @Container\n    static PostgreSQLContainer\u003C?> postgres =\n        new PostgreSQLContainer\u003C>(\"postgres:16-alpine\")\n            .withDatabaseName(\"testdb\")\n            .withUsername(\"test\")\n            .withPassword(\"test\");\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 UserService userService;\n\n    @Test\n    void shouldSaveAndRetrieveUser() {\n        User user = userService.create(\"John\", \"john@mail.com\");\n        assertThat(userService.findById(user.getId()))\n            .isPresent()\n            .hasValueSatisfying(u -> assertThat(u.getName()).isEqualTo(\"John\"));\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Доступные контейнеры\n\n| Контейнер | Класс | Образ |\n|-----------|-------|-------|\n| PostgreSQL | `PostgreSQLContainer` | `postgres:16` |\n| MongoDB | `MongoDBContainer` | `mongo:7` |\n| Kafka | `KafkaContainer` | `confluentinc\u002Fcp-kafka:7.6.0` |\n| Redis | `GenericContainer` | `redis:7` |\n| LocalStack (AWS) | `LocalStackContainer` | `localstack\u002Flocalstack:3` |\n\n### Ключевые принципы\n\n- Testcontainers > H2 -- тестируете на реальной БД; нет расхождений синтаксиса и поведения\n- `@Container` + `@Testcontainers` -- автоматический lifecycle (start\u002Fstop)\n- `@DynamicPropertySource` -- внедрение динамических свойств (порт, URL) в Spring context\n- Контейнеры переиспользуются между тестами через `static` поля\n\n### Частые ошибки\n\n- Docker не установлен -- Testcontainers требует Docker; в CI нужен Docker-in-Docker или Testcontainers Cloud\n- Не `static` контейнер -- без `static` контейнер перезапускается для каждого теста (медленно)\n- Не указать версию образа -- `new PostgreSQLContainer\u003C>(\"postgres\")` приводит к непредсказуемой версии\n\n### Как используется в 2026\n\n- Testcontainers -- стандарт для интеграционных тестов в Java-экосистеме\n- Spring Boot 3.1+ -- нативная поддержка через `@ServiceConnection` (без `@DynamicPropertySource`)\n- Testcontainers Desktop \u002F Cloud -- запуск без локального Docker\n\n> **На собеседовании:** интервьюер хочет услышать, почему Testcontainers лучше H2, и как настраивается интеграция со Spring Boot. Частая ошибка -- не знать про `@DynamicPropertySource` и `@ServiceConnection`.","","middle",[15],"testing",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Testcontainers и зачем они нужны? — Gymterview","Testcontainers -- Java-библиотека для запуска Docker-контейнеров в тестах. Позволяет тестировать с реальными БД, брокерами сообщений, кэшами вместо in-memory за","Testcontainers -- Java-библиотека для запуска Docker-контейнеров в тестах. Позволяет тестировать с реальными БД, брокера",[15,13],"Testcontainers -- Java-библиотека для запуска Docker-контейнеров в тестах. Позволяет тестировать с реальными БД, брокерами сообщений, кэшами вместо in-memory заглушек.",true]