اختبار الوحدة في Asp.Net: البرنامج التعليمي الكامل
⚡ ملخص ذكي
يبدأ اختبار وحدة تطبيق ASP.NET في Visual Studio بمشروع اختبار الوحدة، ويربط مرجعًا بالمشروع المستهدف، ويضيف سمات MSTest [TestClass] و[TestMethod]، ويستدعي أساليب Assert لإثبات أن الفئات تتصرف كما هو مصمم.
يعد الاختبار جانبًا أساسيًا في أي لغة برمجة. الاختبار يمكن إنشاء تطبيقات ASP.NET بمساعدة Visual Studio.
يُستخدم Visual Studio لإنشاء أكواد الاختبار، كما يُستخدم لتشغيلها في تطبيقات ASP.NET. بهذه الطريقة، يصبح من السهل التحقق من أي أخطاء في هذه التطبيقات. يأتي Visual Studio مزودًا بوحدة اختبار جاهزة للاستخدام، مما يتيح إجراء اختبارات مباشرة لمشروع ASP.NET.
مقدمة في اختبار ASP.NET
يُعد اختبار الوحدة المستوى الأول لاختبار مشاريع ASP.NET، حيث يركز هذا الاختبار على وظائف التطبيق لضمان عمله بالشكل المتوقع. في ASP.NET، تتمثل الخطوة الأولى في إنشاء مشروع اختبار في Visual Studio، والذي سيحتوي على التعليمات البرمجية اللازمة لاختبار التطبيق.
لننظر إلى صفحة الويب أدناه. تحتوي الصفحة على الرسالة التالية: "Guruتم عرض رسالة "99 – ASP.NET". كيف نتأكد من عرض الرسالة الصحيحة عند تشغيل مشروع ASP.NET؟ يتم ذلك بإضافة مشروع اختبار إلى حل ASP.NET (المستخدم لتطوير تطبيقات الويب). يضمن مشروع الاختبار هذا عرض الرسالة الصحيحة للمستخدم.
دعونا نلقي نظرة أكثر تفصيلاً الآن ونرى كيف يمكننا العمل على الاختبار في ASP.NET.
إنشاء مشروع اختبار وحدة .NET
قبل أن نقوم بإنشاء مشروع اختباري، نحتاج إلى تنفيذ الخطوات عالية المستوى أدناه.
- استخدم "DemoApplication" الخاص بنا والمستخدم في الأقسام السابقة. سيكون هذا هو تطبيقنا الذي يحتاج إلى الاختبار.
- سنضيف فئة جديدة إلى تطبيق العرض التوضيحي. ستحتوي هذه الفئة على سلسلة نصية تسمى 'Guru99 – ASP.NET. سيتم اختبار هذه السلسلة في مشروع الاختبار الخاص بنا.
- وأخيرًا، سنقوم بإنشاء مشروع اختبار. يُستخدم هذا المشروع لاختبار تطبيق ASP.NET.
لذا دعونا نتبع الخطوات العامة المذكورة أعلاه ونرى كيفية تنفيذ الاختبار.
الخطوة 1) تأكد من أن DemoApplication مفتوح في Visual Studio.
الخطوة 2) لنضف الآن فئة جديدة إلى تطبيق العرض التوضيحي. ستحتوي هذه الفئة على سلسلة نصية تسمى 'Guru99 – ASP.NET. سيتم اختبار هذه السلسلة في مشروع الاختبار الخاص بنا.
اتبع الخطوة أدناه لإضافة فئة جديدة.
- في Visual Studio، انقر بزر الماوس الأيمن فوق "DemoApplication" في مستكشف الحلول.
- اختر الخيار إضافة->فئة من قائمة السياق.
الخطوة 3) في هذه الخطوة،
- قم بتسمية "Tutorial.cs" للفئة الجديدة.
- انقر فوق الزر "إضافة" لإضافة الملف إلى DemoApplication.
الآن، تتم إضافة فئة جديدة إلى ملف "DemoApplication".
الخطوة 4) افتح ملف Tutorial.cs الجديد من "DemoApplication". أضف السلسلة "Guru99 – ASP.NET."
لفتح الملف، انقر نقرًا مزدوجًا فوق الملف Tutorial.cs في مستكشف الحلول.
سيكون للملف بعض التعليمات البرمجية الافتراضية المكتوبة بالفعل. لا تهتم بهذا الكود، فقط أضف السطر أدناه من الكود.
namespace DemoApplication { public class Tutorial { public String Name; public Tutorial() { Name = "Guru99 - ASP.Net"; } } }
Code تفسير:-
- متغير الاسم هو من نوع السلسلة.
- وأخيرًا، في دالة البناء الخاصة بفئة Tutorial، قم بتعيين قيمة المتغير Name. يتم تعيين القيمة إلى "Guru99 – ASP.NET
الخطوة 5) انتقل الآن إلى ملف demo.aspx وأضف أسطر التعليمات البرمجية لعرض النص "Guru99 – ASP.NET."
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%> <%=tp.Name%> </div> </form> </body> </html>
Code تفسير:-
- يُنشئ السطر الأول كائنًا من الفئة 'Tutorial'. هذه هي الخطوة الأولى عند التعامل مع الفئات والكائنات. اسم الكائن هو 'tp'.
- أخيرًا نسمي "tutorial.cs" من ملف demo.aspx. يعرض قيمة متغير الاسم.
عند تشغيل البرنامج أعلاه في Visual Studio، سوف تحصل على الإخراج التالي.
انتاج:-
من المخرجات، ترى الرسالة "Guruتم عرض "99 – ASP.NET".
الخطوة 6) والآن، دعونا نضيف مشروع الاختبار الخاص بنا إلى تطبيق العرض التوضيحي. يتم ذلك بمساعدة Visual Studio.
- انقر بزر الماوس الأيمن فوق الحل - DemoApplication.
- في قائمة السياق، اختر الخيار "مشروع جديد".
الخطوة 7) تتضمن الخطوة إضافة مشروع اختبار الوحدة إلى التطبيق التجريبي.
- انقر على نوع العنصر كـ "اختبار" من اللوحة اليمنى.
- قم باختيار العنصر "مشروع اختبار الوحدة" من القائمة التي تظهر في الجزء الأوسط من مربع الحوار.
- إعطاء اسم لمشروع الاختبار. في حالتنا، الاسم المعطى هو "DemoTest".
- وأخيرا، انقر فوق الزر "موافق".
ستشاهد في النهاية إضافة مشروع DemoTest إلى مستكشف الحلول. باستخدام هذا، يمكنك أيضًا رؤية ملفات أخرى مثل UnitTest1.cs والخصائص وما إلى ذلك يتم إنشاؤها افتراضيًا.
تشغيل مشروع الاختبار
يُستخدم مشروع الاختبار الذي تم إنشاؤه في القسم السابق لاختبار تطبيق ASP.NET الخاص بنا. في الخطوات التالية، سنرى كيفية تشغيل مشروع الاختبار.
- تتمثل الخطوة الأولى في إضافة مرجع إلى مشروع ASP.NET. تُنفذ هذه الخطوة لتمكين مشروع الاختبار من الوصول إلى مشروع ASP.NET.
- ثم سنكتب رمز الاختبار الخاص بنا.
- وأخيرًا، سوف نقوم بتشغيل الاختبار باستخدام Visual Studio.
الخطوة 1) لاختبار تطبيقنا التجريبي، يحتاج مشروع الاختبار الأول إلى الرجوع إلى التطبيق التجريبي. إضافة مرجع إلى الحل Demo.aspx.
- انقر بزر الماوس الأيمن فوق مشروع الاختبار التجريبي
- من القائمة اختر خيار إضافة->مرجع.
الخطوة 2) الخطوة التالية هي إضافة مرجع إلى DemoApplication.
- حدد خيار المشاريع من الجانب الأيسر لمربع الحوار
- انقر فوق مربع الاختيار بجوار DemoApplication
- انقر على زر "موافق".
سيسمح هذا لمشروع تجريبي باختبار التطبيق التجريبي الخاص بنا.
الخطوة 3) حان الآن وقت إضافة رمز الاختبار إلى مشروع الاختبار الخاص بنا.
- للقيام بذلك، انقر نقرًا مزدوجًا أولاً على ملف UnitTest1 (يتم إضافة ملف UnitTest1 تلقائيًا بواسطة Visual Studio عند إنشاء مشروع الاختبار) في مستكشف الحلول.
- هذا هو الملف الذي سيتم تشغيله لاختبار مشروع ASP.NET.
ستشاهد الكود أدناه الذي تمت إضافته بواسطة Visual Studio في ملف UnitTest1.cs. هذا هو الكود الأساسي المطلوب لتشغيل مشروع الاختبار.
الخطوة 4) الخطوة التالية هي إضافة الكود المستخدم لاختبار السلسلة "Guru99 – ASP.NET."
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using DemoApplication; namespace DemoTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { Tutorial tp = new Tutorial(); Assert.AreEqual(tp.Name,"Guru99 - ASP.Net"); } } }
- قم بإنشاء كائن جديد يسمى "tp" من النوع Tutorial
- تُستخدم دالة Assert.AreEqual في .NET لاختبار ما إذا كانت قيمة ما تساوي قيمة أخرى. لذا، في حالتنا، نقارن قيم tp.Name بـ Guru99 – ASP.NET.
الخطوة 5) والآن، لنُشغّل مشروع الاختبار. للقيام بذلك، نحتاج إلى الذهاب إلى خيار القائمة: اختبار -> تشغيل -> جميع الاختبارات
انتاج:-
ستظهر نافذة مستكشف الاختبار في Visual Studio. سيؤدي ذلك إلى عرض النتيجة المذكورة أعلاه وإظهار أن الاختبار تم تشغيله بنجاح في Visual Studio.
سمات وتأكيدات اختبار MSTest التي ستستخدمها
استخدم Microsoftتوفر مساحة الاسم .VisualStudio.TestTools.UnitTesting مجموعة صغيرة من السمات والتأكيدات التي تغطي معظم اختبارات وحدة ASP.NET. إن تعلم هذه السمات أولاً يجعل قراءة وصيانة كل اختبار لاحق أسهل.
- [فئة الاختبار] – يشير هذا إلى أن الفئة عبارة عن حاوية للاختبارات. يقوم MSTest بفحص الفئات التي تحتوي على هذه السمة عند اكتشافها.
- [طريقة الاختبار] يشير الرمز `-` إلى دالة عامة بدون معلمات كاختبار فردي. تُرجع الدالة قيمة فارغة (void) أو من نوع Task أو ValueTask.
- [اختبار التهيئة] / [اختبار التنظيف] – يتم تشغيلها قبل وبعد كل طريقة اختبار. استخدمها لإنشاء إعدادات مشتركة والتخلص منها، مثل مستودع وهمي أو سياق في الذاكرة.
- [تهيئة الفئة] / [تنظيف الفئة] – يتم تشغيلها مرة واحدة للفصل بأكمله. وهي مفيدة عندما يكون الإعداد مكلفًا، على سبيل المثال عند تهيئة قاعدة بيانات اختبارية.
- [DataRow] و [DataTestMethod] – توفير مدخلات مُعَلمة بحيث تغطي طريقة اختبار واحدة عدة حالات.
داخل كل دالة اختبار، تتحقق فئة Assert من النتيجة. تشمل الاستدعاءات الشائعة Assert.AreEqual لمقارنة القيم، وAssert.IsTrue وAssert.IsFalse للقيم المنطقية، وAssert.IsNull وAssert.IsNotNull للمراجع، وAssert.ThrowsException للاستثناءات المتوقعة. صمّم كل اختبار باستخدام نمط الترتيب، والتنفيذ، والتأكيد (Arrange, Act, Assert) بحيث تبقى مراحل الإعداد والاستدعاء والتحقق منفصلة بصريًا. يُسهّل هذا التصميم تصحيح أخطاء الاختبارات الفاشلة لأن السطر الفاشل غالبًا ما يكون هو سطر التأكيد الوحيد في الأسفل.
مقارنة بين MSTest وNUnit وxUnit لـ ASP.NET
تهيمن ثلاثة أطر اختبار على بيئة .NET. يعمل كل منها داخل Visual Studio ويتكامل مع dotnet test، لذا فإن الاختلاف يكمن في الغالب في الأسلوب ودعم المجتمع والسلوك الافتراضي.
- MSTest – تم الشحن بواسطة Microsoft ويأتي مُثبّتًا مسبقًا مع قالب مشروع اختبار الوحدات في Visual Studio الذي استُخدم سابقًا في هذا البرنامج التعليمي. وهو الخيار الافتراضي الأكثر أمانًا عندما يكون الفريق جديدًا على اختبار الوحدات. Microsoft كومة.
- NUnit – الأقدم بين الثلاثة، تم نقله أصلاً من JUnit. يوفر نموذج قيود غني، واختبارات ذات معلمات من خلال TestCase و TestCaseSource، ودعمًا ناضجًا عبر كل إصدار من .NET.
- xUnit.net – يستخدم داخليًا من قبل فرق ASP.NET Core و Entity Framework Core. يستبدل أسلوب SetUp بالمنشئ و IDisposable، ويشجع على استخدام فئة اختبار واحدة لكل سلوك، ويستخدم [Fact] و [Theory] بدلاً من [TestMethod].
تكتشف جميع الأطر الثلاثة الاختبارات من خلال السمات، وتُشغّلها باستخدام أمر dotnet test، وتُنتج تقارير XML بصيغة trx أو xUnit التي تستخدمها خطوط أنابيب التكامل المستمر مثل Azure DevOps، وGitHub Actions، و Jenkins يمكن استهلاكها مباشرةً. بالنسبة لأول مشروع ASP.NET، يُفضّل استخدام MSTest لتبسيط سلسلة الأدوات. أما الفرق التي ترغب في مزيد من خيارات التخصيص أو التي تستخدم ASP.NET Core بالفعل، فغالبًا ما تختار xUnit لضمان التوافق مع إطار العمل الذي بُني عليه.
أفضل الممارسات لاختبار الوحدة لتطبيقات ASP.NET
اتباع مجموعة صغيرة من العادات يحافظ على سرعة وموثوقية وفائدة مجموعة البرامج طوال عمر مشروع ASP.NET.
- اختبر سلوكًا واحدًا لكل طريقة. الاختبار الذي يؤكد عدة أشياء غير مترابطة يفشل لأسباب عديدة ويستغرق وقتاً أطول لإصلاحه.
- قم بتسمية الاختبارات وفقًا للغرض. نمط مثل MethodUnderTest_Scenario_ExpectedResult يجعل مخرجات مستكشف الاختبار عبارة عن مواصفات قابلة للقراءة للفئة.
- اعزل الوحدة عن الأنظمة الخارجية. قم بتغليف استدعاءات الملفات والشبكة وقواعد البيانات خلف واجهات واستبدلها بنماذج وهمية أو محاكاة حتى لا يصطدم الاختبار بالتبعية الحقيقية.
- حافظ على سرعة الاختبارات. استهدف إنهاء مجموعة الاختبارات الكاملة في ثوانٍ. يتم تخطي الاختبارات البطيئة، وتخفي الاختبارات المتخطاة الأخطاء.
- اتبع نموذج الترتيب، والتنفيذ، والتأكيد. تشير ثلاثة مربعات قصيرة ذات خطوط فارغة بينها إلى النية وتسهل اكتشاف الخطوط الفاشلة.
- قم بإجراء الاختبارات على كل عملية إيداع. قم بتوصيل اختبار .NET بخط أنابيب التكامل المستمر (CI) بحيث يؤدي الاختبار المعطل إلى منع الدمج بدلاً من النشرping إلى الإنتاج.
- Tracتغطية الكود k، ولكن لا تسعى وراءها. تسلط التغطية الضوء على المسارات غير المختبرة، لكن العدد الكبير وحده لا يضمن الجودة. Revانظر ماذا تفعل الأسطر المفقودة بالفعل.
عند تطبيق هذه الممارسات معًا، فإنها تحول مشروع DemoTest المبني أعلاه إلى نواة لمجموعة أدوات تلتقط الأخطاء في كل عملية دفع، وتوثق السلوك للمطورين المستقبليين، وتمنح الثقة عند إعادة هيكلة تطبيق ASP.NET.


















