例えばこちらの記事で紹介しています。
メリットは何ですか?
静的分析はクールに思えますが、同時に単体テストで null をパラメーターとして渡す機能を妨げます。(記事の例に従った場合)
単体テストのトピックについてですが、自動テストを既に実践している場合、現在の状況を考えると、コード契約の意味はありませんか?
アップデート
Code Contracts で遊んでみて、少しがっかりしました。たとえば、受け入れられた回答のコードに基づいて:
public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);
return 2.0;
}
単体テストでは、null が渡されないこと、およびコントラクトがビジネス ロジックの場合に結果がゼロ以上であることを確認するテストを作成する必要があります。つまり、最初のコントラクトを削除しても、特にこの機能のテストを行っていない限り、テストが壊れることはありません。ただし、これは、Visual Studio のより優れた (究極など) エディションに組み込まれている静的分析を使用しないことに基づいています。
基本的に、それらはすべて従来の if ステートメントを記述する別の方法に要約されます。Code Contracts を使用して TDDを実際に使用した私の経験は、その理由とその方法を示しています。