В проекте 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
System.setProperty("QUARKUS_DATASOURCE_JDBC_URL"
не влияет, я думаю, что кваркус уже запустился и не следит за изменением переменных env. - person Rolintocour   schedule 11.09.2020