5

FluentAssertions では、さまざまな形式でさまざまな主張を行うことができます。

x.Should().BeEquivalentTo(y);
x.ShouldBeEquivalentTo(y);

どちらも有効なアサーションです。

なぜShouldプロパティではなくメソッドなのですか? パラメータを取る例を見たことがないShouldので、簡単にプロパティにできたように思えます。

と断言することもできます

x.Should().NotBeNull().And.BeEquivalentTo(y);

ここでAndは、メソッドではなくプロパティです。それぞれが同じタイプの要素 (メソッド/プロパティ) であってはなりませんAndか?Should

TL;DRShouldプロパティではなく FluentAssertions でメソッド を作成するという設計上の選択の背後に正当な理由がありましたか?

4

2 に答える 2

11

Should()のクラスに追加される拡張メソッドですx追加できるのは拡張メソッドのみです。C# には拡張プロパティがありません。

AndNotBeNull()クラスが返すプロパティです。そこでクラスを制御し、実際のプロパティをクラスに追加できます。

于 2014-08-18T15:08:25.503 に答える
3

Should()は、C# 言語の制限によるメソッドです。これは拡張メソッドです。クラスの元のコードがメソッドを実装していなくても、ライブラリで定義されているメソッドは、FluentAssertions任意の型で呼び出すことができます (したがって)。x.Should()

拡張プロパティを実装できないためShould、メソッドにする必要があります。

そのメソッドは、 とFluentAssertions同様に 内で定義されたオブジェクトを返すNotBeNull()ため、これらのオブジェクトには、関連/有用/意味のあるプロパティを含めることができます。

要するに、正当な理由は、利用可能な唯一の選択肢だからです。

于 2014-08-18T15:09:22.930 に答える