FluentAssertionsを使用して辞書メンバーの「同等性」を制御する方法

ブラックライト

FluentAssertionsを使用して、辞書の値が等しいかどうかを比較する方法を制御する方法はありますか?

私はクラスを持っており、その1つのプロパティは辞書(string / double)です。クラスの2つのインスタンス(期待されるものと実際のもの)を比較し、辞書のメンバーについて、「同等性」がどのように決定されるかを指定したいと思います。

示されているようなクラスがあると仮定します。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var t1 = new Thing();
        t1.Name = "Bob";
        t1.Values.Add("Hello", 100.111);
        t1.Values.Add("There", 100.112);
        t1.Values.Add("World", 100.113);

        var t2 = new Thing();
        t2.Name = "Bob";
        t2.Values.Add("Hello", 100.111);
        t2.Values.Add("There", 100.112);
        t2.Values.Add("World", 100.1133);

        t1.Should().BeEquivalentTo(t2);
    }
}

public class Thing
{
    public string Name { get; set; }

    public Dictionary<string, double> Values { get; set; } = new Dictionary<string, double>();
}

たとえば、辞書の「World」エントリを比較する方法を指定できるようにしたいと思います。実際には、値が非常に大きいか、小数点以下10桁以上で同じである可能性がありますが(それ以降はそうではありません)、「1%未満の差でも同じ」のように言う必要があると思います。

FluentAssertionsがメンバーを教えてくれる方法と、それらが同じではない理由が好きで、カスタムIAssertionRule(Optionsラムダを使用)を試しましたが、辞書のメンバーではなく、クラスのプロパティを比較しているように見えました。

私は比較対象のクラスを所有していないため、「Equal」メソッドをオーバーライドできず、カスタム比較子(IEquatable)を指定する方法を見つけることができません-しかし、それらが同じでない理由の流暢な詳細を失うことになると思います。

可能であるが、(ディクショナリの値ではなく)クラスのプロパティであるdoubleにも任意のメソッドが適用される場合は、問題ありません。

ありがとう。

ミハル・チエチャン

Nkosiの回答に続いて、これは私が使用しているBeApproximatelyの例です(での使用を許可BeApproximatelyするためdecimal?):

    [CustomAssertion]
    public static void BeApproximately(this NullableNumericAssertions<decimal> value, decimal? expected, decimal precision, string because = "",
        params object[] becauseArgs)
    {
        if (expected == null)
            value.BeNull(because);
        else
        {
            if (!Execute.Assertion.ForCondition(value.Subject != null).BecauseOf(because)
                .FailWith($"Expected {{context:subject}} to be '{expected}' {{reason}} but found null"))
                return;

            Decimal num = Math.Abs(expected.Value - (Decimal) value.Subject);

            Execute.Assertion.ForCondition(num <= precision).BecauseOf(because, becauseArgs).FailWith("Expected {context:value} to approximate {1} +/- {2}{reason}, but {0} differed by {3}.", (object) value.Subject, (object) expected.Value, (object) precision, (object) num);
        }
    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

コサインメトリックを使用して辞書間の類似性を計算する方法は?

fortranのdoループの制御変数として配列メンバーを使用する

Pythonを使用して辞書の値をインクリメントする方法

MVPを使用してAndroidの可視性を制御する

初心者のPython:辞書のメンバーシップを確認して決定構造を使用する

Python辞書のメンバーとして引数を渡す

Pythonのパンダを使用してデータフレームから辞書の辞書を作成する方法

systemctlを使用してmariadbサーバーを制御する方法は?

サーバー送信イベントからのデータを使用してテーブルに書き込む速度を制御する

GCDを使用してアニメーションシーケンスを制御する方法

UIStepperを使用してグローバル変数を制御する方法は?

GPIOドライバーを使用して別のデバイスのドライバーからピンを制御する方法

列挙型とswitchステートメントを使用してメソッドの実行を制御する

JQueryを使用してCSSに基づくSVGアニメーションを制御する方法は?

チェックボックスを使用してキャンバス上の描画を制御する方法

マニフェストを使用してDPIスケーリングと互換性の無効化を制御する方法

FluentAssertionsを使用して、異なるタイプを含む辞書の2つのコレクションを比較します

バッチを使用してUSBポートへの電力を制御する方法

APIのデータとして辞書を使用する方法は?

マウスの位置を使用してキャラクターアニメーションを制御する

SkSpriteNodeを使用してシーンキットのキャラクターの動きを制御する方法

C#を使用してUSBポートを制御する方法

JavaScriptを使用してdivの動きを制御する方法

pystemdを使用してsystemdのtimedatedntpサービスを制御する方法は?

メディアクエリを使用して画像のダウンロードを制御する

配列を使用して数値の範囲を制御するIfステートメント

配列サイズを使用してオプション メニューのサイズを制御する

SwipeRefreshLayoutを使用してフラグメントを使用してViewPagerを制御する方法

Anibleのカウンターを使用してループを制御する

TOP 一覧

  1. 1

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  6. 6

    画像変更コードを実行してもボタンの画像が変更されない

  7. 7

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    Python / SciPyのピーク検出アルゴリズム

  10. 10

    Ansibleで複数行のシェルスクリプトを実行する方法

  11. 11

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  12. 12

    二次導関数を数値計算するときの大きな誤差

  13. 13

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  14. 14

    androidsoongビルドシステムによるネイティブコードカバレッジ

  15. 15

    Reactでclsxを使用する方法

  16. 16

    値間の一致を見つける最も簡単な方法は何ですか

  17. 17

    Using Angular's UI-router, how can we make sure the new version of the html partial views are used, rather than the cached version?

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  20. 20

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  21. 21

    How to access json value by key value in freemarker?

ホットタグ

アーカイブ