FluentAssertions-ShouldBeEquivalentToを空とnullを等しいものとして比較する方法

マイクサクトン

いくつかのカスタムシリアル化コードの単体テストの一部としてFluentAssertionライブラリを使用しており、ShouldBeEquivalentToをnullと空のリストと等しくなるように強制的に比較する方法を探しています。

基本的に、私のテストは次のようになります。

    [Test]
    public void Should_be_xxx()
    {
        ClassWithList one = new ClassWithList { Id = "ten", Items = null };

        string serialized = Serialize(one);
        ClassWithList two = Deserialize(serialized);

        two.ShouldBeEquivalentTo(one);
    }

ただし、Deserializeメソッドの機能の1つは、コレクションタイプが入力データにない場合、逆シリアル化されたクラスのプロパティをnullではなく空のリストに設定することです。したがって、非常に単純化すると、インスタンスItems = new List<string>がnullではなく2になる状況になります。

明らかに、one.Items = new List<string>()比較する前に設定することはできますが、実際には、これらのメソッドでアサートしている複雑なドメインオブジェクトが多数あり、一般的な解決策を探しています。別の言い方をすれば、次のテストに合格する方法を知っている人はいますか。

    public class ClassWithList
    {
        public string Id { get; set; }
        public List<string> Items { get; set; }
    }

    [Test]
    public void Should_be_xxx()
    {
        ClassWithList one = new ClassWithList { Id = "ten", Items = null };
        ClassWithList two = new ClassWithList { Id = "ten", Items = new List<string>() };

        two.ShouldBeEquivalentTo(one);
    }

別の言い方をすれば、同等性の比較の一環として、クラスXのすべてのコレクションに次のテストを適用することを検討しています。

  if (subject.Items == null)
  {
     expected.Items.Should().BeEmpty();
  }
  else
  {
     expected.Items.Should().BeEquivalentTo(subject.Items);
  }
マイクサクトン

上記のデニスからの情報に基づいて、私はこれを解決することができました次の実際のコード:

    public class ClassWithList
    {
        public string Id { get; set; }
        public List<string> Items { get; set; }
        public List<ClassWithList> Nested { get; set; }
    }

    [TestClass]
    public class Test
    {
        [TestMethod]
        public void Should_compare_null_to_empty()
        {
            ClassWithList one = new ClassWithList { Id = "ten", Items = null, Nested = new List<ClassWithList> { new ClassWithList { Id = "a" } } };
            ClassWithList two = new ClassWithList { Id = "ten", Items = new List<string>(), Nested = new List<ClassWithList> { new ClassWithList { Id = "a", Items = new List<string>(), Nested = new List<ClassWithList> { } } } };

            two.ShouldBeEquivalentTo(one, opt => opt
                .Using<IEnumerable>(CheckList)
                .When(info => typeof(IEnumerable).IsAssignableFrom(info.CompileTimeType)));
        }

        private void CheckList(IAssertionContext<IEnumerable> a)
        {
            if (a.Expectation == null)
            {
                a.Subject.Should().BeEmpty();
            }
            else
            {
                a.Subject.ShouldBeEquivalentTo(a.Expectation, opt => opt
                    .Using<IEnumerable>(CheckList)
                    .When(info => typeof(IEnumerable).IsAssignableFrom(info.CompileTimeType)));
            }
        }
    }

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

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

編集
0

コメントを追加

0

関連記事

FluentAssertions:ShouldBeEquivalentToとShould()。Be()とShould()。BeEquivalentTo()?

2つのMemoryStreamをFluentAssertionsと比較する方法

FluentAssertions 等效比較行為和 IMemberInfo

FluentAssertionsは文字列をGuidと比較します

FluentAssertions で「AllNotSatisfy」条件を実行する方法

FluentAssertionsを使用して非同期例外とparamNameをアサートする

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

リストを確認する方法は、FluentAssertionsを使用して注文されます

FluentAssertionsを使用してXUnitでMediatRハンドラーをテストする方法

FluentAssertions:文字列にShouldBeEquivalentToの定義が含まれていません

(いつ)FluentAssertionsを使用するのは良い考えですか?

FluentAssertions:要素の各ペアでカスタム比較を使用して2つのコレクションを比較する方法は?

FluentAssertionsは、繰り返される構成を除外します

shouldBeEquivalentToのC#FluentAssertionsグローバルオプション

C#でMockVerifyとFluentAssertions.Should()を混在させる

Assert.Fail()をFluentAssertionsに置き換える方法

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

FluentAssertionsを使用してCustomAssertionを作成するにはどうすればよいですか?

ExclusiveNestedObjectsが設定されている場合にObjectDisposedExceptionを引き起こすFluentAssertions

どのようにチェーンの複数の「と」FluentAssertionsで例外をチェックします

FluentAssertions:ソートされたリストの同等性

FluentAssertionsを使用したオプションの同等性のテスト

FluentAssertionsライブラリを使用した複数のアサーション

FluentAssertionsを使用してコンバータがタイプに適用されているかどうかをアサートする方法

FluentAssertionsは2つのオブジェクトをどのように比較しますか(Reflectionまたは別の方法を使用)?

二重プロパティを持つオブジェクトのリストをFluentAssertions(C#)と比較する

FluentAssertions Throw()は使用するためにリストされていません

FluentAssertionsを本番コードで使用する必要がありますか?

FluentAssertions Should()。BeEquivalentTo()は、型がC#9レコードの場合、些細なケースで失敗し、オブジェクトを文字列として扱っているように見えます

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

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

  5. 5

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

  6. 6

    Reactでclsxを使用する方法

  7. 7

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

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

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

  19. 19

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

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ