長所と短所のリストに 1 つの項目がありません。これは、マニアックなパラメーター チェックよりも単体テストの方がはるかに安全な方法にするのに十分重要な項目です。
WhenとWhereを考慮する必要があります。
単体テストの場合、when と where は次のとおりです。
- いつ:設計時
- ここで:アプリケーション コード外の専用ソース ファイル内
For overkill data checking they are:
- when: at runtime
- where: entangled in the application source code, typically using asserts.
That is the point: code covered by unit testing detects errors at design time when you run the tests, if you are the paranoid and schizofrenic kind of tester (the bests) you write tests designed to break whatever can be, checking each data boundary and perverse input. You also use code coverage tools to ensure every branch of every alternative is tested. You have no limit : tests lies in their own files and do not clutter application. Doesn't matter if you get ten times as many test lines than the actual application code, no run time penalty, no readability penalty.
一方、統合されたオーバーキル テストは実行時にエラーを検出します。. 最悪の場合、ユーザー システムでエラーが検出され、何もすることができなくなります (このエラーが発生したことを聞いたことがあったとしても)。また、あなたが妄想的なタイプであっても、テストを制限する必要があります. アプリケーション コードの 90% をアサーションにすることはできません。可読性の問題、メンテナンス、パフォーマンスの大幅な低下を引き起こします。では、どこで停止しますか: 外部入力のパラメーターのみをチェックしますか? 内部関数のすべての可能なまたは不可能な入力をチェックしますか? すべてのループ不変条件をチェックしていますか? また、フロー データ (グローバル、システム ファイルなど) がなくなったときのテスト動作も変更されましたか? また、アサーション コードにもいくつかのバグが含まれている可能性があることを認識しておく必要があります。アサーションの式が除算を実行するとどうなりますか。DIVIDE-BY-ZERO エラーなどが発生しないようにする必要があります。
もう 1 つの問題は、多くの場合、アサーションが失敗したときに何ができるかがわからないことです。実際のエントリポイントにいる場合は、ユーザーまたは lib ユーザーが理解できるものを返すことができます... 内部関数をチェックしているときに