PowerShell / المتوسط: الربط والأخطاء والوحدات والبيانات والاختبارات / الدرس 12
اختبار السلوك العام بمثبتات معزولة
افصل التحليل والنموذج واختبار المحرك واعتماد الوحدة والتكامل المؤثر مع حماية الخرج والفشل.
في هذه الصفحة
أهداف الدرس
- اختيار فحوص القيم والأنواع والقنوات والرفض.
- شرح Pester كاعتماد اختبار مستقل الإصدار.
- إظهار النطاق وما لم يختبر بالمحرك.
توفر كل طبقة تحقق دليلاً مختلفاً
يسأل المحلل النحو والمخطط المطلوب والنوع ويختبر المحرك الربط والتعداد والاستثناء والخرج. يضيف التكامل مزوداً أو بعيداً أو ملفاً بتصريح مستقل. لا تسم Python اختبار PowerShell أو الاستيراد تكاملاً كاملاً؛ سم الأدوات والمدخل والحدود غير المختبرة. ومن المهم أن تظهر الطبقات غير المختبرة بوضوح في التقرير، لأن نقص المحرك محلياً لا يبرر تحويل نجاح البيانات إلى ادعاء توافق منصة.
لا يعزل اسم الاختبار البيئة
استخدم المصطنع والخاص لا ملف بدء أو اعتماد أو حالة مضيف. قد ينفذ الاستيراد تهيئة ويتسرب mock للأصل. افصل المؤثر والصافي وصرح البديل وحد المؤقت لاحقاً. لا تشغل خدمة للواقعية؛ المتاح هنا فحوص بيانات فقط لغياب PowerShell وPester. وقد ينفذ الاعتماد شيفرة عند استيراده قبل وصول الاختبار إلى موضع mock، لذلك يجب عزل حدود الاستيراد والآثار أيضاً لا جسم الفعل وحده.
لإطار الاختبار نسخته وعمره
تقدم Pester فحوصاً بواجهة وإصدار ولا يضمنها تثبيت7، وقد تتغير القواعد والاكتشاف. ثبتها واقرأ مرجعها. يوضح المثال مطلباً بأسلوبها دون تثبيت أو تشغيل؛ اختبر الحقيقي النوع والعدد والرفض والتشخيص والاستعادة لا نصاً سليماً فقط. وتحدد نسخة إطار الاختبار قواعد اكتشاف الحالات وتقييمها، فلا يجوز استنتاجها من إصدار اللغة أو افتراض أن القواعد نفسها متاحة في كل تثبيت.
Describe 'Synthetic record contract' {
It 'keeps an identifier textual' {
$record = [pscustomobject]@{ Id = '001'; Count = 2 }
$record.Id | Should -BeOfType ([string])
$record.Id | Should -Be '001'
}
}
القواعد توضيحية لم تتحقق بالمحرك أو Pester والسجل منشأ دون مزود أو خدمة.
اختبار الفشل والخرج العرضي لا التخطيط الداخلي
تشمل الحالات العدد والرسالة الزائدة والخطأ والJSON والخصائص والترميز والإلغاء. ليفشل الاختبار والعائد بصدق ولا تكفي PASS. لا تجمد الداخل عند بقاء السلوك، وليمثل mock الفشل والجزئي لا المطلوب دائماً. ويجب أن يعود فشل التحقق بحالة فشل للحاضنة، لا أن يقتصر على رسالة مرئية قد تتجاهلها الأتمتة وتواصل النشر رغم خرق العقد.
التحقق من عقد بيانات محدود وتسميته بدقة
يثبت النموذج المعرف ويرفض المشوه لا الرابط أو Pester. افحص الخرج والحالة، وليستخدم اللاحق النسخ المحددة مع آثار مستبدلة أو خاصة. صرح الناقص لا تثبيتاً عاماً أو خدمة لتوسيع الادعاء؛ الصغير الصادق أفضل من تكرار داخل مجهول الأثر. ويمكن للبديل أن يعيد شكلاً صحيحاً جزئياً ثم يفشل، لذلك يجب اختبار النتيجة النهائية والبيانات معاً بدل محاكاة نجاح مثالي دائم.
def validate(record):
return isinstance(record.get('Id'), str) and type(record.get('Count')) is int and record['Count'] >= 0
assert validate({'Id': '001', 'Count': 2})
assert not validate({'Id': 1, 'Count': 2})
print('PASS valid fixture')
print('PASS rejected malformed identifier')
PASS valid fixture
PASS rejected malformed identifier
تفحص الحاضنة الرسائل والصفر لا قواعد PowerShell أو Pester أو مزوداً أو أثراً.
الأخطاء الشائعة وإصلاحها
الإبلاغ عن النموذج تغطية محرك
- لماذا يحدث؟
- دُمجت طبقات الدليل.
- كيف تصلحه؟
- سم الأداة والحدود.
- كيف تتجنب تكراره؟
- احفظ دليل الإصدار طبقياً.
استدعاء mock الأصل عرضاً
- لماذا يحدث؟
- لم يعزل الأثر.
- كيف تصلحه؟
- استخدم واجهة محددة ومثبتات آمنة.
- كيف تتجنب تكراره؟
- اختبر الرفض دون المضيف.
التحقق من نص عرض سليم فقط
- لماذا يحدث؟
- أُهملت العقود الأخرى.
- كيف تصلحه؟
- تحقق من الكائن والفشل العام.
- كيف تتجنب تكراره؟
- أدرج الفارغ والمشوه والجزئي.
اختبر فهمك
1. لماذا تسجل نسخة Pester مستقلة؟
اعرض الحل المشروح
هي وحدة مستقلة بقواعدها واكتشافها وتوافقها؛ لا يثبت المحرك نسختها أو تنفيذها.
2. ماذا يتحقق اختبار تلوث الخرج؟
اعرض الحل المشروح
افحص كل نوع ومخطط والعدد مع التشخيص؛ لا يعوض النهائي نصاً سابقاً يكسر التالي.
أهم ما تعلمته
- اختبر البيانات والرفض والقنوات والاستعادة.
- افصل ادعاءات المثبت والمحرك والإطار والتكامل.