JavaでDBのアクセスを含むテストを書くときにTestContainersというライブラリが便利だと知ったので調べた
TestContainersは、JUnitのテストをサポートするJavaのライブラリで、Dockerコンテナ上でDBやSelenium web browserなどを起動することができます。
Testcontainers は、JUnit テストをサポートするJava ライブラリで、一般的なデータベース、Selenium Web ブラウザー、またはその他のDocker コンテナーで実行できる軽量で捨てやすいインスタンスを提供する
Spring Boot のアプリならば、諸々ラップした以下のライブラリを使うのがよさそう
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インスタンスが生成されテストが実行される