Skip to content

テストデータベース戦略

NENE2 のデータベースアダプターテストは、デフォルトで決定論的であり、開発者固有のデータベースサーバーを必要としないようにします。

デフォルト戦略

フレームワークが管理するデータベースアダプターテストは、まず SQLite インメモリデータベースを使用します。

理由:

  • テストは既存の PHP コンテナー内で実行される
  • ローカルの MySQL または PostgreSQL の認証情報が不要
  • 各テストが独自のスキーマを作成できる
  • composer check に十分な速さで動作する
  • アダプターの検査と理解が容易

フォーカスされたデータベースアダプターチェックのデフォルトコマンド:

bash
docker compose run --rm app composer test:database

composer check は引き続きデータベースアダプターテストを含む完全な PHPUnit スイートを実行します。

テストの形

データベースアダプターテストは:

  • テスト内でスキーマを作成する
  • 小さく決定論的なデータを使用する
  • 本番に近い認証情報を避ける
  • マイグレーション状態に依存することを避ける(テストが明示的にマイグレーションについてのものでない限り)
  • 生の環境変数より型付き config オブジェクトを優先する
  • SQL の期待値をテスト対象のアダプターの近くに置く

外部データベース

SQLite でカバーできないアダプターの動作については、Docker Compose を通じて MySQL の検証が利用可能です。

サービスを起動してオプトインコマンドを実行します:

bash
docker compose up -d mysql
docker compose run --rm app composer test:database:mysql

このパスは、実際の MySQL サービスに対する PDO MySQL 接続作成・パラメータ化クエリ実行・トランザクションロールバックを検証します。

外部データベーステストは、CI にドキュメント化されたサービスコンテナーと安全な認証情報が存在するまでオプトインのままです。デフォルトのローカル composer check パスをブロックしません。

Docker Compose のデフォルトはローカル専用の開発認証情報です。必要に応じて環境変数で上書きし、実際のデータベースシークレットをコミットしないでください。

マイグレーションテスト

マイグレーションテストはリポジトリアダプターテストと分離する必要があります。

マイグレーションテストを導入する場合は、以下を定義する必要があります:

  • CI で使用するデータベースサービス
  • 実行間でスキーマをリセットする方法
  • シードが許可されるかどうか
  • 実行する Composer コマンド
  • マイグレーションが意図的に不可逆な場合の動作

MIT ライセンスの下で公開されています。