Spring @Sql Аннотации, можно ли запускать один раз перед всеми тестами?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring @Sql Аннотации, можно ли запускать один раз перед всеми тестами?

Сообщение Anonymous »

Используя Spring для интеграционных тестов, я могу заполнить тестовую базу данных такими сценариями...

Код: Выделить всё

@Test
@Sql({"/db/schema.sql", "/db/accountConfig.sql", "/db/functions/fnSomething.sql"})
public void verifySomething() {
...
}
Однако мне бы хотелось запускать все файлы .sql только один раз перед запуском любого теста. Есть ли способ JUnit 4 сделать это? Похоже, что @Sql работает только для методов с аннотациями @Test.
Я использую Junit 4, Spring Boot, Java 15, Testcontainers.Что я пробовал...
  • Я пробовал использовать @BeforeClass для класса, который расширяют мои тестовые классы но, похоже, это работает после моих тестов.
  • В Testcontainers есть функция сценария инициализации, но для этого требуется только один файл, а это не идеально.
  • Я' Я также пробовал ScriptUtils.executeSqlScript, но по какой-то причине тестовым контейнерам это не нравится.
Вот мой пример кода, который работает с @ Sql, но не работает с ScriptUtils.executeSqlScript.

Код: Выделить всё

@ContextConfiguration(initializers = AbstractIntegrationTest.Initializer.class)
public abstract class AbstractIntegrationTest {

@ClassRule
public static MSSQLServerContainer mssqlserver = new MSSQLServerContainer();

public static class Initializer implements ApplicationContextInitializer {

@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
ConfigurableEnvironment environment = configurableApplicationContext.getEnvironment();
Properties props = new Properties();
props.put("spring.datasource.driver-class-name", mssqlserver.getDriverClassName());
props.put("spring.datasource.url", mssqlserver.getJdbcUrl());
props.put("spring.datasource.username", mssqlserver.getUsername());
props.put("spring.datasource.password", mssqlserver.getPassword());

environment
.getPropertySources()
.addFirst(new PropertiesPropertySource("myTestDBProps", props));

configurableApplicationContext.setEnvironment(environment);
}
}
Мои тестовые классы просто расширяют AbstractIntegrationTest. Но использование @Sql запускает сценарии для каждого тестового примера. Есть ли у кого-нибудь предложения по лучшему способу инициализации сценариев SQL? Попробовал Flyway, но он не позволяет создать БД из скрипта.

Подробнее здесь: https://stackoverflow.com/questions/685 ... -all-tests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»