アサートと優れたalwaysAssert()
機能。私見は、単体テストよりも重要です。単体テストでは、テストしようと考えた特定のケースでのみバグを見つけることができるからです。同じプログラマーがコードとテストを書いた場合、彼/彼女はおそらく両方で同じエッジケースを見逃すでしょう。さらに、コンポーネントの機能や動作するデータの環境が複雑すぎて、想定されるテストケースを思い付かないため、ユニットテストが実用的でない場合があります。
主張の美しさは、仮定を文書化し、想定外の入力でそれらをテストする能力にあります。これらの仮定のいずれかが間違っている場合、コードは「動作」する代わりに大声で失敗しますが、微妙に誤った結果を生成します。また、アサートなしの場合よりも、問題の根本に近いところで失敗します。実際には、コードについて十分な仮定を明示的に述べ、これらの仮定がすべて正しい場合、通常、コードは正しいです。
アサートに関する一般的な不満の1つは、それらをオフにできることです。IMHOのすべての言語または標準ライブラリにalwaysAssert()
は、同じ機能を果たすassert
がオフにできない機能または大まかな同等物が必要です。これは、アサーションをオフにする利点が無視できる、コードのパフォーマンスが重要ではない領域での仮定をチェックするために使用できます。