質問
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つのステップのプロセスで何とか動作しました:
-
IEqualityComparer&lt; T&gt;
の実装の定義
-
3番目のパラメーターとして比較子インスタンスを
Assert.True
メソッドに渡します:Assert.True(expected、actual、new MyEqualityComparer());
しかし、 FluentAssertions パッケージを使用して、同じ結果を得るための別のより良い方法があります。次のことができます。
// Assert
expected.Should().BeEquivalentTo(actual));
興味深いことに、 Assert.Equal()
は、2つのリストの要素を同じ順序で取得するように注文した場合でも常に失敗します。