【テストコンテナーズ】

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だよ
← 用語集にもどる