まだ使い始めなので、整理できていません。
pom.xml
以下では、MySQLを試してみた。
Docker Compose
Docker Compose · Testcontainers
現状ではMacではDocker Composeのバージョンが古すぎて(1.8.0が使われる)、 問題があるようです。
Docker Compose 1.10.0からVersion 3のフォーマットになったため、 Docker Compose 1.8.0はおそらくVersion 2のフォーマットが必須です。
こちらは書き直すの手間なので、今は動作確認していません。
データベースコンテナ
以下の2つの方法が可能です。
- JUnitのRule/ClassRuleを使う方法
- 特別なJDBC URLを使う方法
MySQL
JUnitのRule/ClassRuleを使う方法では、 設定ファイルはカスタマイズできますが、 今のところ、データの初期化の検証は行えていません(mountで対応できるはず)。
- テストコード
- 設定ファイル
特別なJDBC URLを使う方法では、データの初期化も検証済みです。
例にはありませんが、パラメータを複数指定する場合は、 以下のように、’&‘でつなげる方法で問題ありません。
jdbc:tc:mysql:5.5://hostname/databasename?TC_MY_CNF=conf&TC_INITSCRIPT=schema.sql&TC_DAEMON=true
ちなみに、この方法だとユーザ名とパスワードは不明ですが、 URLだけ指定していれば問題なさそうです。 例えば、DbSetupのDriverManagerDestinationはパラメータを3つ取りますが、 user, passwordはnullで問題ありませんでした。
注意すべきは、設定ファイルなどのリソースは、 クラスパスの通っている場所に置く必要があります。 Mavenの標準レイアウトの場合、src/test/resouces 以下に置きます。
また、デフォルトではConnectionクローズ時に自動的にコンテナが削除されますが、 TC_DAEMON=trueとすることで、コンテナが維持されます。 実際には、テスト終了時に削除される感じです。