وحدة x:هل تؤكد أن قائمتين <T> متساويتان؟
-
03-07-2019 - |
سؤال
أنا جديد على TDD وxUnit لذا أريد اختبار طريقتي التي تبدو كالتالي:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
هل هناك أي طريقة تأكيد يمكنني استخدامها؟أعتقد أن شيئا مثل هذا سيكون لطيفا
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
ل وحدة طرق مقارنة مجموعة المكتبة هي
CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters
و
CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter
مزيد من التفاصيل هنا: CollectionAssert
مبيونيت يحتوي أيضًا على تأكيدات مجموعة مشابهة لـ NUnit: Assert.Collections.cs
نصائح أخرى
في الإصدار الحالي من XUnit (1.5) يمكنك استخدامها فقط
<اقتباس فقرة>وAssert.Equal (من المتوقع، الفعلية)؛
اقتباس فقرة>والأسلوب أعلاه لن تفعل عنصر بالمقارنة عنصر من القائمتين. أنا لست متأكدا إذا كان هذا يعمل لأي إصدار سابق.
ومع xUnit، اذا كنت تريد الكرز اختيار خصائص كل عنصر لاختبار يمكنك استخدام Assert.Collection.
Assert.Collection(elements,
elem1 => Assert.Equal(expect1, elem1.SomeProperty),
elem2 => {
Assert.Equal(expect2, elem2.SomeProperty);
Assert.True(elem2.TrueProperty);
});
وهذا باختبار عدد المتوقعة ويضمن أن يتم التحقق من كل عمل.
في الآونة الأخيرة، كنت أستخدم xUnit 2.4.0
و Moq 4.10.1
الحزم في تطبيق asp.net core 2.2 الخاص بي.
في حالتي تمكنت من تشغيله من خلال عملية مكونة من خطوتين:
- تعريف التنفيذ
IEqualityComparer<T>
قم بتمرير مثيل المقارنة كمعلمة ثالثة إلى
Assert.True
طريقة:Assert.True(expected, actual, new MyEqualityComparer());
ولكن هناك طريقة أخرى أجمل للحصول على نفس النتيجة باستخدام التأكيدات بطلاقة طَرد.يسمح لك بالقيام بما يلي:
// Assert
expected.Should().BeEquivalentTo(actual));
ومن المثير للاهتمام أن Assert.Equal()
يفشل دائمًا حتى عندما أطلب عناصر قائمتين للحصول عليها بنفس الترتيب.