私は次の方法を持っています:
private void DoSomething(CoolClass coolClass)
{
if (coolClass == null)
{
throw new ArgumentNullException("coolClass");
}
coolClass.Name = "Pepe";
}
コードコントラクトを使用すると、次のように記述できます。
private void DoSomething(CoolClass coolClass)
{
Contract.Requires<ArgumentNullException>(coolClass != null, "IS NULLL!");
coolClass.Name = "Pepe";
}
2番目の方法は短くて簡単です。私が抱えている問題は、ビルド時に実行時に例外がスローされないことです。次のように表示されます。
説明:アセンブリ(おそらく「CodeContractsTest」)は、Contract.Requiresを呼び出しており、CONTRACTS_FULLシンボルが定義されているため、コードコントラクトバイナリリライタ(CCRewrite)を使用してリライトする必要があります。 CONTRACTS_FULLシンボルの明示的な定義をプロジェクトから削除し、再構築します。 CCRewriteは http://go.Microsoft.com/fwlink/?LinkID=16918 からダウンロードできます。リライタをインストールした後、VisualStudioで[コードコントラクト]ペインのプロジェクトの[プロパティ]ページから有効にすることができます。 「ランタイムコントラクトチェックの実行」が有効になっていることを確認します。これにより、CONTRACTS_FULLが定義されます。
VSを使用しない限り、.netのCodeContractsを ここ からダウンロードします。
次に、プロジェクトの「ランタイムチェック」をチェックして、ランタイムでビルドすると例外がスローされるようにします。
私たちのアプリは、PowerShellスクリプトを使用してJenkinsでビルドされています。単純なコマンドや属性、または簡単な方法で、ランタイムをチェックインして例外をスローする方法はありますか?
シンプルさが好きなら、メソッドの独自のバージョンを書いてみませんか?
public class CustomContract
{
public static void Requires<TException>( bool Predicate, string Message )
where TException : Exception, new()
{
if ( !Predicate )
{
Debug.WriteLine( Message );
throw new TException();
}
}
}
フレンドリーなAPIを作成するためだけにコードコントラクトを使用すると、大砲でスズメを撃つように聞こえます。
次のプロジェクトプロパティを変更することで、実行中にこの例外が発生するのを防ぐことができました。
プロジェクトを右クリック->プロパティ->コード契約(タブ)アセンブルモードを「標準契約が必要」に変更し、チェックボックスも選択します-ランタイム契約チェックを実行します