データベースにバインドされている中規模のビジネス アプリケーションを考えてみましょう。このアプリケーションには、複数のテーブルに影響を与える多くのビジネス ルールがあります。たとえば、次の単純なものを見てください。
Person
データベースには、Customer
、という名前のテーブルがありProspectiveCustomer
、それぞれに「アクティブ」フラグが付いています- 個人は、顧客および/または見込み客になることができます
- 同一人物である顧客と見込み顧客を同時にアクティブにすることはできません
- 個人がアクティブでない場合、顧客または見込み客はアクティブにできません。
- 請求書の発行とライフサイクルによって、誰がアクティブかどうかが決まります
このようなルールは複雑すぎて、データベース トリガーで強制することはできず、設計上の選択により、ダーティ ジョブを実行する集中化されたコードはありません。次に、テスト中に毎日気付くように、バグによってデータベースが一貫性のない状態に設定される可能性が常にあります。
これが本番環境で検出されないことを恐れているため、データベースの状態をチェックして不整合を報告するスクリプトを作成することをお勧めします。いくつかのアクティビティ ログに加えて、それは本番環境のバグに気づき、必要に応じてデータベースを修復するのに役立ちます。
この方法の唯一の欠点は、これらのセルフテスト スクリプトの開発時間が余分にかかることです (私の場合は無視できません)。基本的な何かが欠けていますか?
また、これらのセルフテストが記述されていれば、テスト活動にも非常に役立ち、開発の余分な作業負荷を最小限に抑えることができます。