パラメータ (例: a string
) を受け取り、smth を実行する単純なメソッドを作成する必要があります。通常、私は2つのテストで終わります。最初のものはガード句です。2 番目は、予想される動作を検証します (簡単にするために、メソッドは失敗しないはずです)。
[Fact]
public void DoSmth_WithNull_Throws()
{
var sut = new Sut();
Assert.Throws<ArgumentNullException>(() =>
sut.DoSmth(null));
}
[Fact]
public void DoSmth_WithValidString_DoesNotThrow()
{
var s = "123";
var sut = new Sut();
sut.DoSmth(s); // does not throw
}
public class Sut
{
public void DoSmth(string s)
{
if (s == null)
throw new ArgumentNullException();
// do smth important here
}
}
FsCheck [Property]
属性を使用してランダム データを生成しようとするnull
と、他の多数のランダム値がテストに渡され、ある時点で NRE が発生します。
[Property]
public void DoSmth_WithValidString_DoesNotThrow(string s)
{
var sut = new Sut();
sut.DoSmth(s); // throws ArgumentNullException after 'x' tests
}
これが、さまざまなケースをカバーするために多数のランダム データを生成するという FsCheck の全体的なアイデアであることを認識しています。これは間違いなく素晴らしいことです。
望ましくない値[Property]
を除外するように属性を構成するエレガントな方法はありますか? (この特定のテストでは、それは です)。null