はい、イベントチェーン全体を1つのユニットとしてテストする必要があります。したがって、テーブルに挿入していくつかのトリガーを起動するプロシージャを使用した例では、さまざまな入力のプロシージャを評価する単体テストを作成する必要があります。各ユニットテストは、正しい値を返すか、テーブルの状態を正しく変更するか、正しい電子メールを作成するか、そのようなことを行うように設計されている場合は正しいネットワークパケットを送信するかによって、合格または不合格になる必要があります。要するに、ユニットが持つすべての効果を検証する必要があります。
ユニットテストの設計には多少の手間がかかりますが、その作業の大部分はユニットを手動でテストするために行う必要があります。同様に徹底的かつ大幅に簡単にすることができます。
データを変更することでテストはより難しくなりますが、テストがそれほど重要ではなく、実際にユニットテストの価値が上がります。ほとんどの困難は、ユニットに変更が加えられるたびにではなく1回だけ考慮すればよいからです。保存されたデータセット、セットアップ/分解の一部である挿入/更新/削除、および狭いスコープの操作はすべて、これを簡単にするために使用できます。質問はデータベース固有ではないため、詳細は異なります。
ハイエンドまたはローエンドに複雑なしきい値はなく、テストや単体テストを停止する必要はありません。次の質問を検討してください。
- 常にバグのないコードを書いていますか?
- 小さなユニットには常にバグはありませんか?
- 大きなユニットにバグがあっても大丈夫ですか?
- 災害を引き起こすにはいくつのバグが必要ですか?
新しいジョブを開始し、多くの場所で使用されている小さな機能を最適化するというタスクがあるとします。アプリケーション全体は、誰も覚えていない従業員によって作成および保守されました。ユニットには通常の予想される動作を説明するドキュメントがありますが、それ以外はほとんどありません。どちらを選びますか?
- アプリケーションのどこにも単体テストはありません。変更を行った後、ユニット自体に対していくつかの手動テストを実行して、ドキュメントで期待される値がまだ返されることを確認できます。その後、本番環境に展開し、指を交差させて動作することを期待できます(結局、あるユニットでバグのないコードと最適化を常に記述して別のユニットに影響を与えることはありません)、またはアプリケーション全体の学習方法に膨大な時間を費やすことができます動作するため、直接または間接的に影響を受けるすべてのユニットを手動でテストできます。
- 毎日またはオンデマンドで自動的に実行されるアプリケーション全体の単体テスト。通常の入力値とその期待される応答だけでなく、異常な値と発生する予期される例外もチェックします。変更を行い、アプリケーションの単体テストスイートを実行すると、他の3つのユニットが予期した結果を返さなくなったことがすぐにわかります。そのうちの2つは良性であるため、ユニットテストを微調整してそれを説明します。3つ目は、もう少し微調整と小さな新しい単体テストが必要です。変更を加えると、一連のテスト全体が成功し、自信を持って変更を展開できます。