مفهوم ال Unit Testing

unit-test-C-visual-studio-asp-net-asp-mvc-299x225
في برمجة الكمبيوتر ، اختبار الوحدات (Unit Testing) هي طريقة لاختبار اجزاء البرامج المكونة من Classes , Units, Components , Libraries , etc ، وذلك لتسهيل عملية اقتناص الاخطاء من البرنامج. لتدرك عزيزي القاريء اهمية عملية اختبار اجزاء البرنامج المعروفة باسم Unit Testing تخيل معي انك صاحب شركة لتصنيع واصلاح التلفاز ولديك تلفاز به احد العيوب وعليك ان تعرف سبب العطل ، وتريد انت ان تعرف المكون التالف وتقوم تغييره او اصلاحه ، كفني تصليح ستقوم بقياس او اختبار كل مكون علي حده مثل ال Capastors او ال Transistors الخ من مكونات التلفاز حتي تعرف المكون التالف وتقوم باصلاحه او تغييره. كذلك الامر في البرمجة لتسهيل عملية اقتناص الاخطاء عليك ان تقوم بتحديد الكود المسؤل عن العملية التي تفشل في برنامجك وتقوم بعمل الاختبارات اللازمة عليه (Unit Test) حتي تتعرف علي المكون (سبب المشكلة) وتقوم بأعادة تكويده من جديد حتي يعمل بشكل طبيعي.

الفوائد

الهدف من عملية اختبار الوحدات/الاجزاء/المكونات (Unit tests) هي فصل كل جزء من البرنامج عن الاخر واختباره هل هو سليم ام يحتاج الي تصحيح/تعديل. والتأكيد علي تأمين اجزاء البرنامج. وفوائد اخري ستتعرف عليها فيما بعد.

اقتناص المشاكل مبكراً

استخدام عملية اختبار الوحدات (Unit tests) تجعل اكتشاف المشاكل في وقت مبكر جداً من عملية تطوير البرمجيات (development cycle)

عند عملية برمجة/تطوير برنامجك ، كل اضافة او Class جديد تقوم ببرمجته تقوم بأختباره قبل دمجه مع باقي مكونات برنامجك لتجنب حدوث الاخطاء.

سهوله التعديل/التغيير

عملية اختبار الاجزاء/الوحدات (Unit tests) تسمح للمبرمجين بالتعديل علي الكود في وقت اخر ، والتأكيد علي انه يعمل بشكل طبيعي . هذه العملية هي لكتابة كود يسمح بأختبار اجزاء برنامجك من Functions او Methods او Classes ، بحيث اذا وقع خطأ سيقوم المبرمج بالتعديل عليه بسرعة .

التسهيل علي المبرمج في معرفه اذا كان جزء من برنامجه (Class , Unit , Library , Method, الخ) مازال يعمل ومتوافق مع اجزاء البرنامج الاخري ام لا .

من عمليات الاختبار المستمرة في عمليات الصيانة المستمرة ، اختبار الوحدات سيعكس بدقة الاستخدام المقصود للتعليمات البرمجية اثناء حدوث اي تغيير. بالاعتماد علي التطوير المستمر والتغطية من خلال عمليات الاختبار، يجعل اجزاء برنامجك في نفس الوقت متوافقة ويتم صيانتها باستمرار.

تصميم Unit Test

لنفترض اننا نقوم بأنشاء تطبيق من نوع Windows Forms Application علي Visual Studio ، التطبيق سيكون بسيط جداً جداً عبارة عن برنامج له واجهة مكونه من 2 Text Box و Button عند الضغط علي ال button يقوم بجمع الارقام المكتوبة في الخانتين واظهار الناتج في رسالة . وسنقوم بعمل Class يسمي Adder ليقوم بعملية الجمع .
الان علينا فتح مشروع جديد في الفيجوال استوديو من نوع windows forms application ونسميه علي سبيل المثال “DemoProject” ، وبعد انشاء المشروع نترك الواجهة كما هي حالياً .
الان نضغط Right-Click علي ال”DemoProject” من ال Solution Explorer ونختار ADD وثم New Project ونختار Class Library ونقوم بتسميتها Adder بعد انشاء المكتبة نقوم بحدث ملف ال Class1.cs ونقوم بالضغط right-click علي ال Adder من ال Solution Explorer ونقوم بأضافة Class جديد ونسميه Adder ونقوم بحذف الكود الموجود ونستبدله بهذا الكود

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Adder
{
public class Adder
{
public int Add(int x, int y)
{
return x + y;
}
}
}

 

حالياً مكونات المشروع في ال Solution Explorer كالتالي :

Visual Studio 2012 Solution Explorer

والان انتهينا من انشاء المكتبة المسؤلة عن العملية الحسابية البسيطة جداً ، الان سنقوم باضافتها للمشروع الخاص بالواجهة “DemoProject”
نقوم بالضغط Right-Click علي ال References الخاصة بال “DemoProject” وبعدها نختار Add Reference ستظهر لنا الDialog كما بالشكل التالي :

-يمكنك الضغط علي الصورة لتكبيرها او Right-Click و Open Link in new tab حتي لاتفقد الصفحة
Add Reference Visual Studio 2012 Dialog

من المنطقة اليسري من ال Dialog اختار Solution وبعدها Projects ومن قائمة ال Assemblies اختار ال Adder واضغط OK ! .

الان المكتبة Adder جاهزة للاستعمال في المشروع “DemoProject”.

الان نقوم بأضافه مشروع لعمل الاختبارات اللازمة علي المكتبة Adder ، من ال Solution Explorer نضغط Right-Click علي ال Solution الرئيسية وبعدها نختار Add New Project كما بالتالي :

Add Unit Test Project

من ال Visual C# نختار Test ومنها نختار Unit Test Project ونسمي الProject علي سبيل المثال DemoProject.UnitTest ونضغط علي OK !
وسيكون ال Solution Explorer بهذا الشكل :

visual studio 2012 solution explorer

ال Solution الرئيسية مكونة من 3 Projects مكتبة للحساب (Adder) والواجهة (DemoProject) ومنطقة اختبار المكتبات(DemoProject.UnitTest) .

الان علينا اضافة المكتبة Adder الي DemoProject.UnitTest لنستطيع استدعائها واختبارها ، كما قمنا باضافة Adder ل DemoProject نقوم باضافتها لل Unit Test
نقوم بالضغط Right-Click علي References الخاص ب UnitTest ومن ثم Add Reference ونختار من اليسار Solution وختار Adder ونضغط OK ليتم اضافتها! .

الان سنقوم بالتعديل علي ال Class لمسمي UnitTest1.cs
سنقوم باستبدال الكود الموجود بداخله بهذا الكود


using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace DemoProject.UnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Can_Add_Two_Numbers()
{
Adder.Adder adder = new Adder.Adder();
int result = adder.Add(5, 6);
Assert.AreEqual(11, result);
}
}
}

 

الفائده لل Attributes الاول TestClass و TestMethod لكي يعترف بها الفيجوال استوديو انها Unit Tests ويقوم باختبارها.
قمنا بانشاء Method اسمها Can_Add_Two_Numbers وبعدها قمنا باخذ Object من الClass المسمي Adder وقمنا بجمع رقمين 5 + 6 وتتخزين الناتج في المتغير Result وبعدها باستخدام الفئة Assert والميثود AreEqual قارنا هل الناتج المخزن صحيح ويساوي 11 ام لا .

الان من واجهة Test Explorer تبع الفيجوال استوديو نقوم بتشغيل ال Unit Test من خلال اظهارال Test Explorer وبعدها الضغط علي Run All وبعدها سيقوم ال Test Explorer بعرض الناتج كما بالشكل التالي:

Passed Unit Test

الان ظهرت العلامة الخضراء – طريقك اخضر 🙂 – المكتبة تعمل جيداً ، ولكن دعونا الان نتعمد اتلاف المكتبة Adder ونجعلها تعطي نتيجة خاطئة
نذهب لل Adder.cs ونقوم بتعديل كود ال Method المسماه Add بهذا الكود :


public int Add(int x, int y)
{
return x - y;
}

 

ببساطة جعلناه يقوم بطرح الرقمين بدلاً من جمعهم قم بعمل Build للمكتبة Adder ومن خلال Right-Click عليها ثم Build ! . الان سنقوم بالذهاب لل Unit Test Explorer مجدداً ونقوم بالضغط علي Run All والناتج سيكون كالتالي :

Failed Test !

هنا يخبرك ال Test Explorer ان النتيجة 5+6 من المتوقع انها 11 ولكن المتغير result كان يحتوي علي القيمة 1 . وهذا منطقي بما اننا قمنا باتلاف المكتبة Adder ! .

الان قمنا بجولة سريعة جداً عن ال Unit Testing واستخدام ال Visual Studio Test Explorer و Visual Studio Testing Tools ومع العلم ان يوجد لكل لغة برمجة اكثر من اداه و Framework لاجراء الاختبارات اللازمة علي الكود يمكنك الاختيار مابينهم واستخدام ما تحب من هنا : http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks .

حالياً عزيزي القاريء عليك ان تقوم باصلاح الClass المسمي Adder مرة اخري ، وتقوم بعمل الواجهة ل DemoProject وتضيف الخانات وال Button وتقوم باستخدام المكتبة Adder في جمع الرقمين ، ومبروك عليك انت كدا بدأت طريقك باتباع اسلوب Test Driven Development ! 🙂 .

وان شاءالله هنتكلم اكتر عن ال Unit Testing بالتفصيل في دروس قادمة 🙂 .

  • درس ممتاز م. أحمد

    شكرًا على مجهودك الرائع

    • Ahmed Al-Shahawi

      شكراً جداً، شرف ليا تعليقك

  • اتمنى تستمر بش مهندس في هذه الدورس 🙂