استراتيجية الاختبار
نختبر ما هو حسّاس وما يعبر حدوداً. البوّابة على الـ diff لا على الإجمالي: كل سطر يضيفه أو يغيّره الـ PR يجب أن تغطّيه الاختبارات بنسبة ٨٠٪ فأكثر؛ التغطية الإجمالية تُنشَر ولا تحجب الدمج. أربعة مسارات: Fast و Integration يحجبان الدمج على كل PR وبلا path filter، و E2E يحجب الإصدار، والمسار البطيء يعمل ليلاً ويفتح work item. الـ backend integration-first — كل ما يعبر HTTP أو الـ database أو الـ auth يُختبر عبر host حقيقي وقاعدة بيانات حقيقية؛ والموبايل يبقى على شكل الهرم. الحتمية شرط: TimeProvider بدل الساعة الحقيقية، ولا Thread.Sleep، وتمرير الـ CancellationToken. الـ retries ممنوعة في مساري unit و integration، ومسموحة مرّة واحدة في E2E لالتقاط الـ trace فقط. المطوّرون يكتبون كل الاختبارات الآلية في نفس الـ PR، والـ QA تملك الـ exploratory والـ regression اليدوي في Azure Test Plans.
flowchart LR PR["Pull request"] --> Fast["Fast lane<br/>unit + no-Docker subset"] PR --> Int["Integration lane<br/>real database"] Fast --> Merge["Merge to main"] Int --> Merge Merge --> E2E["E2E lane<br/>critical journeys"] E2E --> Rel["Release"] Merge --> Night["Nightly<br/>slow / perf probes"] Night --> WI["Opens a work item"]
للتفاصيل الكاملة والأمثلة انظر النسخة الإنجليزية: Testing Strategy.