وحدة x:هل تؤكد أن قائمتين <T> متساويتان؟

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

  •  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 الخاص بي.

في حالتي تمكنت من تشغيله من خلال عملية مكونة من خطوتين:

  1. تعريف التنفيذ IEqualityComparer<T>
  2. قم بتمرير مثيل المقارنة كمعلمة ثالثة إلى Assert.True طريقة:

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

ولكن هناك طريقة أخرى أجمل للحصول على نفس النتيجة باستخدام التأكيدات بطلاقة طَرد.يسمح لك بالقيام بما يلي:

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

ومن المثير للاهتمام أن Assert.Equal() يفشل دائمًا حتى عندما أطلب عناصر قائمتين للحصول عليها بنفس الترتيب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top