Контейнеры тестов: выполнять TC_INITSCRIPT при каждом тесте

В проекте quakus я успешно настроил тестовые контейнеры, используя только следующую конфигурацию:

%test.quarkus.datasource.driver=org.testcontainers.jdbc.ContainerDatabaseDriver
%test.quarkus.hibernate-orm.dialect=org.hibernate.dialect.PostgreSQL9Dialect
%test.quarkus.datasource.url=jdbc:tc:postgresql:11:///dbname?TC_INITSCRIPT=file:my-file.sql

Удивительно, как это легко.

Однако, когда я тестирую удаление сущностей, я хотел бы выполнять скрипт инициализации перед каждым тестом, т.е. начинать каждый тест с исходной БД.

Есть идеи, как этого добиться?

Я также протестировал, создав PostgreSQLContainer из тестового класса, чтобы управлять его жизненным циклом так, как мне нужно. Проблема в том, что значение порта контейнера является случайным, мне нужно установить его в конфигурации quarkus, но это не работает (кажется, слишком поздно: соединение с 127.0.0.1:6432 отклонено). Я сделал это следующим образом:

@Testcontainers
@QuarkusTest
class MyTest {

  class MyPostgreSQLContainer(imageName: String) : PostgreSQLContainer<MyPostgreSQLContainer>(imageName)

  companion object {

    @Container
    val postgres = MyPostgreSQLContainer("postgres:11")
      .withDatabaseName("integtest")
      .withUsername("postgres")
      .withPassword("pwd")
      .withExposedPorts(5432)

    @BeforeAll
    @JvmStatic
    internal fun beforeAll() {

      postgres.start()
      System.setProperty("QUARKUS_DATASOURCE_JDBC_URL", "jdbc:postgresql://127.0.0.1:${postgres.firstMappedPort}/kpi_integtest");
      println("BeforeAll init() method called")
    }

  }

с конфигурацией application.properties:

quarkus.datasource.jdbc.url=jdbc:postgresql://127.0.0.1:6432/integtest

person Rolintocour    schedule 10.09.2020    source источник
comment
Почему бы вам не установить для свойства env значение getJdbcUrl() вместо firstMappedPort? Также проверьте этот комментарий stackoverflow.com/a/63498933/8587732 Если это не поможет - я рад больше болтать :)   -  person Vitaly Chura    schedule 11.09.2020
comment
@VitalyChura Я также пытался использовать jdbcUrl, но он тоже не работает. System.setProperty("QUARKUS_DATASOURCE_JDBC_URL" не влияет, я думаю, что кваркус уже запустился и не следит за изменением переменных env.   -  person Rolintocour    schedule 11.09.2020
comment
Можете ли вы поделиться примером проекта?   -  person Vitaly Chura    schedule 12.09.2020