UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Java】TestContainersを使ってDBアクセスを含むテストを行う

JavaでDBのアクセスを含むテストを書くときにTestContainersというライブラリが便利だと知ったので調べた

TestContainersは、JUnitのテストをサポートするJavaのライブラリで、Dockerコンテナ上でDBやSelenium web browserなどを起動することができます。

www.testcontainers.org

Testcontainers は、JUnit テストをサポートするJava ライブラリで、一般的なデータベース、Selenium Web ブラウザー、またはその他のDocker コンテナーで実行できる軽量で捨てやすいインスタンスを提供する

Spring Boot のアプリならば、諸々ラップした以下のライブラリを使うのがよさそう

github.com

pom.xmlに依存関係を記載する

    <dependency>
      <groupId>com.playtika.testcontainers</groupId>
      <artifactId>embedded-postgresql</artifactId>
      <scope>test</scope>
    </dependency>

これにより、Spring Boot用の自動構成設定を提供し、コンテナを事前構成してくれる

application. yamlにprofilesのgroupを作り、@ActiveProfiles("db-test")の場合は、embedded-postgresqlのプロファイルも見るように設定する

spring:
  profiles:
    group:
      default:
        - log-sql
      db-test:
        - embedded-postgresql
        - log-sql

そして、application-embedded-postgresql.yaml にはテストで使うDBのスキーマ情報を記載する

spring:
  datasource:
    url: jdbc:postgresql://${embedded.postgresql.host}:${embedded.postgresql.port}/${embedded.postgresql.schema}
    username: ${embedded.postgresql.user}
    password: ${embedded.postgresql.password}

利用したいコンテナをデフォルトから変更する場合は bootstrap.properties に以下のように記載する

embedded.postgresql.dockerImage=postgis/postgis:11-3.0-alpine

これでテスト時にdockerインスタンスが生成されテストが実行される

他参考

TestContainers使ってみないか?