2016-04-22 5 views
3

クラス特性を比較します。流暢アサーション:約私は(それはまた、<code>Magnitude</code>のような他の特性を有する)二重、特性<code>X</code>を持つクラス<code>Vector3D</code>を有する<code>Y</code>及びタイプの<code>Z</code>

Fluent Assertionsを使用して、指定された精度ですべてのプロパティまたはプロパティの選択を比較する最適な方法は何ですか?

現在、私はこのようにそれをやっている:

calculated.X.Should().BeApproximately(expected.X, precision); 
calculated.Y.Should().BeApproximately(expected.Y, precision); 
calculated.Z.Should().BeApproximately(expected.Z, precision); 

は同じことを達成する一つのラインアプローチはありますか? ShouldBeEquivalentToなどを使用するか、プロパティの組み込み/除外を許可する一般的な拡張メソッドを構築する必要がありますか?

答えて

3

はい、ShouldBeEquivalentToを使用すると可能です。

:あなたが唯一のX、YおよびZの性質は、このような場合には、制約を変更比較したい場合は

double precision = 0.1; 
calculated.ShouldBeEquivalentTo(expected, option => options 
    .Using<double>(ctx => ctx.Subject.Should().BeApproximately(ctx.Expectation, precision)) 
    .WhenTypeIs<double>()); 

:次のコードでは、タイプの0.1の精度で重されているすべてのプロパティをチェックします

double precision = 0.1; 
calculated.ShouldBeEquivalentTo(b, options => options 
    .Using<double>(ctx => ctx.Subject.Should().BeApproximately(ctx.Expectation, precision)) 
    .When(info => info.SelectedMemberPath == "X" || 
        info.SelectedMemberPath == "Y" || 
        info.SelectedMemberPath == "Z")); 

別のアプローチは、明示的にウィッヒ性質が比較されるべきFluentAssertionsに伝えることですが、それは少し小さいエレガントです:

double precision = 0.1; 
calculated.ShouldBeEquivalentTo(b, options => options 
    .Including(info => info.SelectedMemberPath == "X" || 
          info.SelectedMemberPath == "Y" || 
          info.SelectedMemberPath == "Z") 
    .Using<double>(ctx => ctx.Subject.Should().BeApproximately(ctx.Expectation, precision)) 
    .When(info => true)); 

UsingステートメントはEquivalencyAssertionOptions<T>を返しませんので、常に真の式でWhenステートメントを呼び出すことでハックする必要があります。

+0

これはきれいです。だから同値テストにどのプロパティを使うかを指定するのに '.Including'ではなく' .When'をこの特定の場合に使用しなければならないのでしょうか? – Ayb4btu

+0

Includingは、比較中に使用するプロパティをFluentAssertionsに明示的に伝えることです。私は解説で自分の答えを更新しました。 –

+0

私はそれは好みの問題だと思いますが、 '.Including(info => info.X).Including(info => info.Y).Including(info => info.Z) '' info.SelectedMemberPath == "X" ... '? – Ayb4btu

関連する問題

 関連する問題