[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-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":15,"progress":16,"seo":17},701,"chto-takoe-testcontainers-i-zachem-oni-nuzhny",16,"spring-test","Spring Test","🧪","Что такое Testcontainers и зачем они нужны?","Testcontainers — библиотека, позволяющая запускать Docker-контейнеры прямо из тестов. Она решает проблему расхождения между тестовой (H2) и боевой (PostgreSQL, MySQL) базами данных, обеспечивая тестирование на реальной СУБД.\n\n### Зачем нужны\n\n- H2 не поддерживает все возможности PostgreSQL (jsonb, оконные функции, специфичные типы)\n- Тесты на реальной БД дают большую уверенность в коде\n- Контейнеры автоматически создаются и уничтожаются\n\n### Подключение зависимостей\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.testcontainers\u003C\u002FgroupId>\n    \u003CartifactId>testcontainers\u003C\u002FartifactId>\n    \u003Cscope>test\u003C\u002Fscope>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>org.testcontainers\u003C\u002FgroupId>\n    \u003CartifactId>postgresql\u003C\u002FartifactId>\n    \u003Cscope>test\u003C\u002Fscope>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>org.testcontainers\u003C\u002FgroupId>\n    \u003CartifactId>junit-jupiter\u003C\u002FartifactId>\n    \u003Cscope>test\u003C\u002Fscope>\n\u003C\u002Fdependency>\n```\n\n### Пример с PostgreSQL\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@SpringBootTest\n@Testcontainers\nclass UserServiceIntegrationTest {\n\n    @Container\n    static PostgreSQLContainer\u003C?> postgres = new PostgreSQLContainer\u003C>(\"postgres:15\")\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(new UserDto(\"Иван\", \"ivan@example.com\"));\n\n        assertNotNull(user.getId());\n        assertEquals(\"Иван\", userService.findById(user.getId()).getName());\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Базовый абстрактный класс для переиспользования контейнера\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@Testcontainers\npublic abstract class AbstractPostgresTest {\n\n    @Container\n    static PostgreSQLContainer\u003C?> postgres = new PostgreSQLContainer\u003C>(\"postgres:15\")\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\n@SpringBootTest\nclass OrderServiceTest extends AbstractPostgresTest {\n    \u002F\u002F Переиспользует контейнер PostgreSQL\n}\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** интервьюер хочет услышать, зачем Testcontainers нужны вместо H2 и как подключить контейнер через `@DynamicPropertySource`. Частая ошибка — не упомянуть абстрактный базовый класс для переиспользования контейнера между тестами.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Testcontainers и зачем они нужны? — Gymterview","Testcontainers — библиотека, позволяющая запускать Docker-контейнеры прямо из тестов. Она решает проблему расхождения между тестовой (H2) и боевой (PostgreSQL, ","Testcontainers — библиотека, позволяющая запускать Docker-контейнеры прямо из тестов. Она решает проблему расхождения ме",[7,13],"Testcontainers — библиотека, позволяющая запускать Docker-контейнеры прямо из тестов. Она решает проблему расхождения между тестовой (H2) и боевой (PostgreSQL, MySQL) базами данных, обеспечивая тестирование на реальной СУБД.",true]