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