テストデータベース戦略
NENE2 のデータベースアダプターテストは、デフォルトで決定論的であり、開発者固有のデータベースサーバーを必要としないようにします。
デフォルト戦略
フレームワークが管理するデータベースアダプターテストは、まず SQLite インメモリデータベースを使用します。
理由:
- テストは既存の PHP コンテナー内で実行される
- ローカルの MySQL または PostgreSQL の認証情報が不要
- 各テストが独自のスキーマを作成できる
composer checkに十分な速さで動作する- アダプターの検査と理解が容易
フォーカスされたデータベースアダプターチェックのデフォルトコマンド:
bash
docker compose run --rm app composer test:databasecomposer 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 コマンド
- マイグレーションが意図的に不可逆な場合の動作