私は次の方法を持っています:
public static DateTime SubQtrs( this DateTime dt, int qtrs )
{
Contract.Requires( qtrs > -1 );
Contract.Requires( ( qtrs * 3 ) >= -120000 && ( qtrs * 3 ) <= 120000 );
// do something
}
パラメーター化された単体テストを作成し、Pex を使用して単体テストを作成しました。予想どおり、Pex はコントラクトの制約をテストし、コントラクトに違反する qtrs 値を渡しました。[ExpectedException(typeof(TraceAssertionException))] で例外を予期するように単体テストに指示し、すべてが合格しました。
MS テスト ハーネス (Pex なし) を使用して単体テストを実行すると、次のエラーが表示されます。
基本的に、contracthelper が失敗したことを示すスタック トレースが表示されます。次に、中止、再試行、無視のいずれかを選択できます。
いずれにせよ、テストは失敗し、次のようになります。例外メッセージ: System.ArgumentOutOfRangeException: 月の値は +/-120000 の間である必要があります。...
単体テストでコード コントラクト エラーが認識されなくなったのはなぜですか?