۱۳۸۹/۱۱/۱۲

توليد خودكار آزمون‌هاي واحد NUnit


تعدادي ابزار براي توليد خودكار متدهاي آزمون‌هاي واحد NUnit از روي كلاس‌هاي موجود در يك اسمبلي وجود دارند كه به دو دسته تقسيم مي‌شود:

الف) آن‌هايي كه فقط نام كلاس‌هاي آزمون واحد و نام متدهاي آن‌را به صورت خودكار توليد مي‌كنند


اين ابزارها و كتابخانه‌ها، تنها كاري كه انجام مي‌دهند يافتن كلاس‌ها و متدهاي عمومي موجود در يك اسمبلي توسط Reflection و سپس توليد يك سري فايل‌ آماده از روي اين اطلاعات است. براي مثال اگر نام كلاس شما Class1 است فايلي به نام TestClass1 را توليد مي‌كنند و اگر يكي از متد‌هاي عمومي اين كلاس به نام Method1 باشد، يك متد خالي را به نام Method1Test ايجاد خواهند كرد و همين.
تبديل CodeSmith NUnit Test Generator فوق به يك T4 template كار ساده‌اي است.

ب) ابزارهايي كه علاوه بر مورد الف، سعي مي‌كنند بدنه‌اي را نيز براي متدهاي واحد توليد شده تهيه كنند


اين افزونه‌ها و برنامه‌ها سعي مي‌كنند به كمك Reflection و همچنين امكانات توليد كد موجود در VS.NET نسبت به توليد كلاس‌ها، متدها و بدنه‌هاي نمونه آن‌ها اقدام كنند. براي مثال اگر نام متد كلاسي، Method1 به همراه يك پارامتر از نوع int باشد، بدنه توليد شده به همراه وهله سازي از كلاس آن و فراخواني اين متد به همراه پارامتر آن خواهد بود.
مشكل مهم اين پروژه‌هاي سورس باز كوچك هم عدم تعهد به نگهداري آن‌ها است. براي مثال آخرين به روز رساني موجود افزونه‌ي NUnitGen شركت ناول، مخصوص VS2008 است يا آخرين به روز رساني TestGen.Net مربوط به دات نت يك است (سورسي هم كه در سايت سورس فورج قرار داده ناقص است) يا مقاله‌ي سايت CodeProject‌ كه ذكر گرديد، با نگارش‌هاي جديد NUnit درست كار نمي‌كند و كامپايل نمي‌شود.

در بين اين‌ها به نظر من Edwinyeah TestGen.Net كار جالبي را انجام داده است و چندين زبان را هم پشتيباني مي‌كند. البته همانطور كه عنوان شد توانايي بارگذاري اسمبلي‌هاي نگارش‌هاي جديد دات نت را ندارد كه موضوع مهمي نيست. سورس آن‌را مي‌توان دريافت و سپس جهت دات نت 4 كامپايل كرد. البته يك سري از كلاس‌هاي آن هم كه در سورس موجود نيستند را مي‌شود از اسمبلي كامپايل شده‌ي آن با Reflector درآورد، به پروژه اصلي اضافه و سپس كامپايل كرد!
كامپايل شده‌ي آن‌را جهت دات نت 4 از اينجا دريافت كنيد.