[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-kak-ispolzovat-sql-i-sqlgroup-dlya-podgotovki-testovykh-dannykh":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},702,"kak-ispolzovat-sql-i-sqlgroup-dlya-podgotovki-testovykh-dannykh",16,"spring-test","Spring Test","🧪","Как использовать Sql и SqlGroup для подготовки тестовых данных?","`@Sql` — аннотация Spring Test, позволяющая выполнять SQL-скрипты до или после теста для подготовки и очистки тестовых данных.\n\n### Базовое использование\n\n```java\n@SpringBootTest\nclass UserServiceSqlTest {\n\n    @Autowired\n    private UserService userService;\n\n    @Test\n    @Sql(\"\u002Ftest-data\u002Fusers.sql\")\n    void shouldFindPreparedUsers() {\n        List\u003CUser> users = userService.findAll();\n        assertEquals(3, users.size());\n    }\n\n    @Test\n    @Sql(\n        scripts = \"\u002Ftest-data\u002Fcleanup.sql\",\n        executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD\n    )\n    void shouldCleanUpAfterTest() {\n        \u002F\u002F ...\n    }\n}\n```\n\n### SqlGroup — группировка скриптов\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@Test\n@SqlGroup({\n    @Sql(\n        scripts = \"\u002Ftest-data\u002Finit-schema.sql\",\n        executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD\n    ),\n    @Sql(\n        scripts = \"\u002Ftest-data\u002Finsert-users.sql\",\n        executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD\n    ),\n    @Sql(\n        scripts = \"\u002Ftest-data\u002Fcleanup.sql\",\n        executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD\n    )\n})\nvoid shouldWorkWithPreparedData() {\n    \u002F\u002F данные из обоих скриптов доступны\n}\n```\n\n\u003C\u002Fdetails>\n\n### Инлайн SQL-выражения\n\n```java\n@Test\n@Sql(statements = {\n    \"INSERT INTO users (name, email) VALUES ('Тест', 'test@example.com')\",\n    \"INSERT INTO users (name, email) VALUES ('Тест2', 'test2@example.com')\"\n})\nvoid shouldWorkWithInlineSql() {\n    assertEquals(2, userService.findAll().size());\n}\n```\n\n`@Sql` можно применять на уровне класса — тогда скрипт будет выполняться перед каждым тестовым методом.\n\n> **На собеседовании:** важно знать про `executionPhase` (BEFORE\u002FAFTER) и возможность инлайн SQL через `statements`. Частая ошибка — забыть про очистку данных после теста при использовании `RANDOM_PORT` (где `@Transactional` rollback не работает).","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как использовать Sql и SqlGroup для подготовки тестовых данн — Gymterview","`@Sql` — аннотация Spring Test, позволяющая выполнять SQL-скрипты до или после теста для подготовки и очистки тестовых данных.","`@Sql` — аннотация Spring Test, позволяющая выполнять SQL-скрипты до или после теста для подготовки и очистки тестовых д",[7,13],true]