حسب الوثائق: https://github.com/nunit/docs/wiki/Order-Attribute
يمكن وضع OrderAttribute على طريقة أو أداة اختبار لتحديد الترتيب الذي يتم تشغيل الاختبارات به.
لا أرى احترام هذه الوثائق بطريقتين مختلفتين.
ضع في اعتبارك حالات TextFixture التالية
[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
يبدو لي هذا عيبًا في التوثيق / الاستيعاب أكثر من أي شيء آخر ، لكن الطريقة التي يوضح بها المستند المرتبط "_ أو تركيبات_" تشير إلي أنه يمكنني الكتابة
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
عندما يكون هذا في الواقع خطأ مترجم للأرقام 1 و 2 و 3
سمة "الطلب" مكررة
سيكون من الرائع حقًا أن يعمل هذا بشكل حدسي مع النسخ المكررة.
Aarskin يساعدنا (مطورو NUnit) والمستخدمون في حالة إبقاء النقاش حول مشكلة واحدة ضمن مشكلة gitHub واحدة.
المتغير الذي تصفه هنا في الأساس هو نفسه الموجود في # 3055. ان هذا...
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
هو نفسه كما لو كنت قد كتبت ...
[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]
بالإضافة إلى أي ترتيب آخر للسمات الثمانية التي تهتم باستخدامها. يتم وضع سمات TestFixture
الأربعة في نفس الفئة ، مما يتسبب في قيام NUnit بإنشاء مثيل لتلك الفئة أربع مرات. يتم أيضًا وضع السمات الأربعة Order
في نفس الفئة ، مما يتسبب في حدوث تعارض نظرًا لأن الاختبار قد يحتوي على طلب واحد فقط.
هذا __ليس _ تحديدًا لـ NUnit. إنها الطريقة التي يعمل بها بناء جملة السمة C #. هناك نقطتان أساسيتان يجب ملاحظتهما:
تنطبق أي سمة موجودة بين قوسين معقوفين على العنصر التالي في الكود الذي يمكنه قبول سمة. في هذه الحالة ، إنه الفصل.
تسلسل السمات الموجودة بين قوسين معقوفين ، مثل [A ، B ، C] له نفس المعنى تمامًا مثل نفس التسلسل داخل أزواج منفصلة من الأقواس ، مثل [A] [B] [C].
كمسألة أسلوب ، أتجنب استخدام بناء جملة الفاصلة مع السمات التي تتسبب في إنشاء مثيلات متعددة للاختبار ، لأنها تؤدي إلى الارتباك.
يمكن إعادة صياغة هذا للسماح بخاصية / معلمة Order
على TestFixture
، ولكن قبل أن نفكر في ذلك ، هل يمكنك إعطائنا حالة استخدام؟ بشكل عام ، يتم استخدام Order
لإجراء اختبارات التكامل في تسلسل حيث تقوم بتنفيذ أجزاء من عملية أطول بالترتيب في اختباراتك. عادةً ما يتم استخدام المعلمة TestFixture
لاختبار نفس الاختبارات ببيانات إدخال مختلفة. لا يمكنني التفكير في سيناريو تريد فيه القيام بذلك بترتيب معين.
حالة الاستخدام الخاصة بي هي اختبار الانحدار المنطقي للأعمال ، والخاصية / المعلمة في TestFixture ، لا يمكنني طلب كسر بالطريقة التي أريد بها استخدام NUnit. أكثر من ذي قبل ، يتم استخدام إطار العمل هذا ليس فقط لاختبار الوحدة.
كحل بديل ، يمكنك التبديل إلى TestFixtureSource
بدلاً من عدة سمات TestFixture
. بشرط وجود TestFixtureSourceAttribute
واحد فقط