آشنايي با NUnit
NUnit يكي از فريم وركهاي آزمايش واحد سورس باز مخصوص دات نت فريم ورك است. (كلا در دات نت هرجايي ديديد كه N ، به ابتداي برنامهاي يا كتابخانهاي اضافه شده يعني نمونه منتقل شده از محيط جاوا به دات نت است. براي مثال NHibernate از Hibernate جاوا گرفته شده است و الي آخر)
اين برنامه با سي شارپ نوشته شده است اما تمامي زبانهاي دات نتي را پشتيباني ميكند (اساسا با زبان نوشته شده كاري ندارد و فايل اسمبلي برنامه را آناليز ميكند. بنابراين فرقي نميكند كه در اينجا چه زباني بكار گرفته شده است).
ابتدا NUnit را دريافت نمائيد:
http://nunit.org/index.php?p=download
يك برنامه ساده از نوع console را در VS.net آغاز كنيد.
كلاس MyList را با محتواي زير به پروژه اضافه كنيد:
using System.Collections.Generic;
namespace sample
{
public class MyList
{
public static List<int> GetListOfIntItems(int numberOfItems)
{
List<int> res = new List<int>();
for (int i = 0; i < numberOfItems; i++)
res.Add(i);
return res;
}
}
}
اكنون بر روي نام پروژه در قسمت solution explorer كليك راست كرده و گزينه add->new project را انتخاب كنيد. نوع اين پروژه را كه متدهاي آزمايش واحد ما را تشكيل خواهد داد، class library انتخاب كنيد. با نام مثلا TestLibrary (شكل زير).
با توجه به اينكه NUnit ، اسمبلي برنامه (فايل exe يا dll آنرا) آناليز ميكند، بنابراين ميتوان پروژه تست را جداي از پروژه اصلي ايجاد نمود و مورد استفاده قرار داد.
پس از ايجاد پروژه class library ، بايد ارجاعي از NUnit framework را به آن اضافه كنيم. به محل نصب NUnit مراجعه كرده (پوشه bin آن) و ارجاعي به فايل nunit.framework.dll را به پروژه اضافه نمائيد (شكل زير).
سپس فضاهاي نام مربوطه را به كلاس آزمايش واحد خود اضافه خواهيم كرد:
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;
سپس بايد ويژگي جديدي به نام TestFixture را به اين كلاس اضافه كرد.
[TestFixture]
public class TestClass
سپس هر متدي كه به عنوان متد آزمايش واحد نوشته ميشود، بايد داراي ويژگي Test باشد تا توسط NUnit بررسي گردد:
[Test]
public void TestGetListOfIntItems()
اكنون براي اينكه بتوانيم متد GetListOfIntItems برنامه خود را در پروژه ديگري تست كنيم، بايد ارجاعي را به اسمبلي آن اضافه كنيم. همانند قبل، از منوي project گزينه add reference ، فايل exe برنامه كنسول خود را انتخاب كرده و ارجاعي از آنرا به پروژه class library اضافه ميكنيم. بديهي است امكان اينكه كلاس تست در همان پروژه هم قرار ميگرفت وجود داشت و صرفا جهت جداسازي آزمايش از برنامه اصلي اينكار صورت گرفت.
پس از اين مقدمات، اكنون متد آزمايش واحد ساده زير را در نظر بگيريد:
[Test]
public void TestGetListOfIntItems()
{
const int count = 5;
List<int> items = sample.MyList.GetListOfIntItems(count);
Assert.That(items.Count,Is.EqualTo(5));
}
اگر آن را (سطر مربوط به Assert را) كلمه به كلمه بخواهيم به فارسي ترجمه كنيم به صورت زير خواهد بود:
ميخواهيم اثبات كنيم كه count مربوط به شيء items مساوي 5 است.
پس از اضافه كردن متد فوق، پروژه را كامپايل نمائيد.
اكنون برنامه nunit.exe را اجرا كنيد تا NUnit IDE ظاهر شود (در همان دايركتوري bin مسير نصب NUnit قرار دارد).
از منوي File آن يك پروژه جديد را آغاز نموده و آنرا ذخيره كنيد.
سپس از منوي project آن، با استفاده از گزينه add assembly ، فايل dll كتابخانه تست خود را اضافه نمائيد.
احتمالا پس از انجام اين عمليات بلافاصله با خطاي زير مواجه خواهيد شد:
---------------------------
Assembly Not Loaded
---------------------------
System.ApplicationException : Unable to load TestLibrary because it is not located under
the AppBase
----> System.IO.FileNotFoundException : Could not load file or assembly
'TestLibrary' or one of its dependencies. The system cannot find the file specified.
For further information, use the Exception Details menu item.
همانطور كه ملاحظه ميكنيد، NUnit با استفاده از قابليتهاي reflection در دات نت، اسمبلي را بارگذاري ميكند و تمامي كلاسهايي كه داراي ويژگي TestFixture باشند در آن ليست خواهد شد.
اكنون بر روي دكمه run كليك كنيد تا اولين آزمايش ما انجام شود. (شكل زير)
رنگ سبز در اينجا به معناي با موفقيت انجام شدن آزمايش است.
ادامه دارد...