【テストコンテナーズ】

Testcontainers とは?

💡 テスト用の本物環境をコードで『ポン』と用意
📌 このページのポイント
Testcontainers ― テストからコンテナを自動起動 テストコード @Testcontainers PostgreSQL... container.start() 起動 Docker コンテナ(自動起動・停止) PostgreSQL :5432 本物のDB Redis :6379 本物のKVS Kafka :9092 本物のMQ テスト実行 本物で検証 自動停止 モック: 動作が本番と異なるリスク Testcontainers: 本物で安心
Testcontainersによるテスト用コンテナの自動管理
ひよこ ひよこ

テストでデータベースを使いたいけど、モックだと本番と動きが違って不安なんだよね…

ペンギン先生 ペンギン先生

そこでTestcontainersだよ。テストコードの中からDockerで本物のMySQLPostgreSQLを起動して、テストが終わったら自動で片付けてくれるんだ

ひよこ ひよこ

毎回コンテナを起動するの?遅くならない?

ペンギン先生 ペンギン先生

確かに軽量なモックよりは時間がかかるけど、数秒で起動するし、何より『本物のデータベースで動く』という安心感は大きいよ。CIでも同じテストが動くのが嬉しいんだ

ひよこ ひよこ

データベース以外にも使えるの?

ペンギン先生 ペンギン先生

Redis、Kafka、ElasticsearchLocalStackAWS互換)など対応モジュールがたくさんあるよ。GenericContainerを使えば任意のDockerイメージもテストで使えるんだ

ひよこ ひよこ

チームのCIでも動くの?

ペンギン先生 ペンギン先生

Docker-in-Dockerか、DockerソケットマウントできるCI環境なら問題なく動くよ。GitHub ActionsGitLab CIでも実績が多いんだ

ひよこ ひよこ

テストデータ初期化とかはどうするの?

ペンギン先生 ペンギン先生

コンテナ起動時にSQLスクリプトを流す機能もあるし、テストごとにコンテナを作り直せばクリーンな状態からスタートできる。テストの独立性を保ちやすいのもTestcontainersの魅力だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Testcontainers」って出てきたら「テストの時だけDockerで本物の環境を立ち上げるツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Test Containers」 = テスト用コンテナ
💬 テスト用のコンテナをプログラムから操作するライブラリだから、そのままTest + Containersだよ
← 用語集にもどる