۱۳۹۰/۰۶/۱۷

استفاده يكپارچه از NUnit در VS.NET بدون نياز به افزونه‌ها


براي استفاده ساده‌تر از ابزارهاي unit testing در ويژوال استوديو افزونه‌هاي زيادي وجود دارند، از ري شارپر تا CodeRush  تا حتي امكانات نسخه‌ي كامل VS.NET كه با MSTest يكپارچه است. اما اگر نخواهيم از MSTest استفاده كنيم و همچنين افزونه‌ها را هم بخواهيم حذف كنيم (مثلا از نسخه‌ي رايگان express استفاده كنيم)، چطور؟
براي حل اين مشكل چندين روش وجود دارد. يا مي‌شود از test runner اين‌ها استفاده كرد كه اصلا نيازي به IDE ندارند و مستقل است؛ يا مي‌توان به صورت زير هم عمل كرد:
به خواص پروژه در VS.NET مراجعه كنيد. برگه‌ي Build events را باز كنيد. در اينجا مي‌خواهيم post-build event را مقدار دهي كنيم. به اين معنا كه پس از هر build موفق، لطفا اين دستورات خط فرمان را اجرا كن.
NUnit به همراه test runner خط فرمان هم ارائه مي‌شود و نام آن nunit-console.exe است. اگر به محل نصب آن مراجعه كنيد، عموما در آدرس C:\Program Files\NUnit xyz\bin\nunit-console.exe قرار دارد. براي استفاده از آن تنها كافي است تنظيم زير صورت گيرد:

c:\path\nunit-console.exe /nologo $(TargetPath)

TargetPath به صورت خودكار با نام اسمبلي جاري پروژه در زمان اجرا جايگزين مي‌شود.
اكنون پس از هر Build، به صورت خودكار nunit-console.exe اجرا شده، اسمبلي برنامه كه حاوي آزمون‌هاي واحد است به آن ارسال گرديده و سپس خروجي كار در output window نمايش داده مي‌شود. اگر خطايي هم رخ داده باشد در قسمت errors قابل مشاهده خواهد بود.
در اينجا حتي بجاي برنامه كنسول ياده شده مي‌توان از برنامه nunit.exe هم استفاده كرد. در اين حالت GUI اصلي پس از هر Build نمايش داده مي‌شود:

c:\path\nunit.exe $(TargetPath)


چند نكته:
1- برنامه nunit-console.exe چون در حال حاضر براي دات نت 2 كامپايل شده امكان بارگذاري dll هاي دات نت 4 را ندارد. به همين منظور فايل nunit-console.exe.config را باز كرده و تنظيمات زير را به آن اعمال كنيد:

<configuration>  
<startup>  
      <supportedRuntime version="v4.0.30319" />  
</startup>  

و همچنين:

<runtime>  
    <loadFromRemoteSources enabled="true" />  

2- خروجي نتايج اجراي آزمون‌ها را به صورت XML هم مي‌توان ذخيره كرد. مثلا:

c:\path\nunit-console.exe /xml:$(ProjectName)-tests.xml /nologo $(TargetPath)



3- از فايل xml ذكر شده مي‌توان گزارشات زيبايي تهيه كرد. براي مثال:
Generating Report for NUnit
NUnit2Report Task


جهت مطالعه بيشتر:
Setting up Visual C#2010 Express with NUnit
Use Visual Studio's Post-Build Events to Automate Unit Testing Running
3 Ways to Run NUnit From Visual Studio