3

quakus プロジェクトでは、次の構成のみを使用して testcontainers を正常にセットアップしました。

%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

これは驚くほど簡単です。

ただし、エンティティの削除をテストするときは、各テストの前に initscript を実行したいと思います。つまり、初期 DB で各テストを開始します。

それを達成する方法はありますか?

また、必要に応じてライフサイクルを管理するために、テスト クラスから 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
4

0 に答える 0