Интеграционное тестирование в Spring: TestContext Framework, аннотация @Sql
Декларативное выполнение SQL сценариев с помощью @Sql
В дополнение к механизмам для программного запуска SQL сценариев вы можете декларативно настроить SQL сценарии в Spring TestContext Framework. В частности, вы можете объявить аннотацию @Sql в тестовом классе или тестовом методе, чтобы настроить отдельные операторы SQL или пути ресурсов к SQL сценариям, которые должны выполняться для данной базы данных до или после метода интеграционного тестирования. Поддержка @Sql обеспечивается SqlScriptsTestExecutionListener, который включен по умолчанию.
Объявления @Sql на уровне метода по умолчанию переопределяют объявления уровня класса. Однако, начиная с Spring Framework 5.2, это поведение можно настроить для каждого тестового класса или для каждого тестового метода через @SqlMergeMode.
Семантика ресурсов пути
Каждый путь интерпретируется как ресурс Spring. Простой путь (например, "schema.sql") рассматривается как ресурс пути к классам, относящийся к пакету, в котором определен тестовый класс. Путь, начинающийся с косой черты, рассматривается как ресурс абсолютного пути к классам (например, "/org/example/schema.sql"). Путь, который ссылается на URL-адрес (например, путь с префиксом classpath:, file:, http:) загружается с использованием указанного протокола ресурсов.
В следующем примере показано, как использовать @Sql на уровне класса и на уровне метода в тестовом классе интеграции на основе JUnit Jupiter:
@SpringJUnitConfig
@Sql("/test-schema.sql")
class DatabaseTests {
@Test
void emptySchemaTest() {
// запускаем код,
// использующий тестовую схему без тестовых данных
}
@Test
@Sql({"/test-schema.sql", "/test-user-data.sql"})
void userTest() {
// запускаем код,
// использующий тестовую схему и тестовые данные
}
}
Обнаружение сценария по умолчанию
Если не указаны сценарии или операторы SQL, делается попытка определить сценарий по умолчанию, в зависимости от того, где объявлен @Sql. Если значение по умолчанию не может быть обнаружено, создается исключение IllegalStateException.
- Объявление уровня класса: если аннотированный тестовый класс - com.example.MyTest, соответствующий сценарий по умолчанию - classpath:com/example/MyTest.sql.
- Объявление на уровне метода: если аннотированный тестовый метод называется testMethod() и определен в классе com.example.MyTest, соответствующий сценарий по умолчанию - classpath:com/example/MyTest.testMethod.sql.
Читайте также:
- Интеграционное тестирование в Spring: TestContext Framework, выполнение SQL сценариев
- Интеграционное тестирование в Spring: TestContext Framework, программное управление транзакциями
- Интеграционное тестирование в Spring: TestContext Framework, аннотации транзакций
Комментарии
Отправить комментарий