マニュアル: Testcontainers

投稿日:

まだ使い始めなので、整理できていません。

pom.xml

Maven dependencies参照。

以下では、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のフォーマットが必須です。

こちらは書き直すの手間なので、今は動作確認していません。

データベースコンテナ

Database containers

以下の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で問題ありませんでした。

DriverManager#getConnection

注意すべきは、設定ファイルなどのリソースは、 クラスパスの通っている場所に置く必要があります。 Mavenの標準レイアウトの場合、src/test/resouces 以下に置きます。

また、デフォルトではConnectionクローズ時に自動的にコンテナが削除されますが、 TC_DAEMON=trueとすることで、コンテナが維持されます。 実際には、テスト終了時に削除される感じです。

公式サイト