xUnit:2つのリストをアサート< T>等しいです?

StackOverflow https://stackoverflow.com/questions/419659

  •  03-07-2019
  •  | 
  •  

質問

TDDとxUnitは初めてなので、次のようなメソッドをテストします。

List<T> DeleteElements<T>(this List<T> a, List<T> b);

使用できるAssertメソッドはありますか?このようなことがいいと思う

    List<int> values = new List<int>() { 1, 2, 3 };
    List<int> expected = new List<int>() { 1 };
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

    Assert.Exact(expected, actual);

このようなものはありますか?

役に立ちましたか?

解決

xUnit.Net はコレクションを認識するため、必要なことは

Assert.Equal(expected, actual); // Order is important

他の利用可能なコレクションアサーションは、 CollectionAsserts.cs

NUnit の場合、ライブラリコレクションの比較方法は

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

and

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

詳細はこちら: CollectionAssert

MbUnit には、NUnitに似たコレクションアサーションもあります: Assert.Collections.cs

他のヒント

XUnit(1.5)の現在のバージョンでは、ただ使用できます

  

Assert.Equal(expected、actual);

上記のメソッドは、2つのリストの要素ごとの比較を行います。 これが以前のバージョンで機能するかどうかはわかりません。

xUnitを使用して、各要素のプロパティを選択してテストする場合は、Assert.Collectionを使用できます。

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

これは予想されるカウントをテストし、各アクションが検証されることを確認します。

最近、asp.net core 2.2アプリで xUnit 2.4.0 および Moq 4.10.1 パッケージを使用していました。

私の場合、2つのステップのプロセスで何とか動作しました:

  1. IEqualityComparer&lt; T&gt;
  2. の実装の定義
  3. 3番目のパラメーターとして比較子インスタンスを Assert.True メソッドに渡します:

    Assert.True(expected、actual、new MyEqualityComparer());

しかし、 FluentAssertions パッケージを使用して、同じ結果を得るための別のより良い方法があります。次のことができます。

// Assert          
expected.Should().BeEquivalentTo(actual));

興味深いことに、 Assert.Equal()は、2つのリストの要素を同じ順序で取得するように注文した場合でも常に失敗します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top