System.Diagnostics.Contracts.ContractExceptionは、私のテストプロジェクトではアクセスできません。このコードは、純粋に私自身がVisual Studioの光沢のある新しいコピーをいじっていることに注意してください。しかし、私が間違っていることを知りたいのです。
VSのプロフェッショナル版を使用しているため、静的チェックはありません。(私が好きな)コードコントラクトを引き続き使用するために、私のメソッドが機能する唯一の方法は、実行時にスローされる例外をキャッチすることであると考えましたが、これが可能であるとは思いません。
試験方法
[TestMethod, ExpectedException(typeof(System.Diagnostics.Contracts.ContractException))]
public void returning_a_value_less_than_one_throws_exception()
{
var person = new Person();
person.Number();
}
方法
public int Number()
{
Contract.Ensures(Contract.Result<int>() >= 0);
return -1;
}
エラー
エラー1'System.Diagnostics.Contracts.ContractException'にアクセスできません その保護レベルのため。
編集
もう少し考えた後、私はコメントと以下で議論された結論に達しました。方法を考えると、これがコードコントラクトフォームで表現できる要件がある場合は、そのようにテストを記述します。
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void value_input_must_be_greater_than_zero()
{
// Arrange
var person = new Person();
// Act
person.Number(-1);
}
これにより、コントラクトがコードの一部であり、削除されないことが保証されます。ただし、これには、コードコントラクトが指定された例外を実際にスローする必要があります。ただし、これが必要ない場合もあります。