
آموزش Unit Testing در سی شارپ با NUnit 3
آموزش Unit Testing در سی شارپ با NUnit 3 یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی، ساختن تست واحد (Unit Test) در سی شارپ با NUnit 3 است که با نام اصلی Introduction to .NET Testing with NUnit 3 از شرکت Pluralsight منتشر شده است.
انجام تست نرم افزار در دات نت
تکنولوژی دات نت پلتفرمی را در اختیار شما قرار می دهد تا بتوانید با زبان های مختلف، اقدام به ساختن نرم افزار های مورد نظر خود کنید. علاوه بر این موضوع امکان نوشتن انواع مختلفی از تست ها برای زبان های سی شارپ و F# و ویژوال بیسیک وجود دارد. برای هر کدام از این زبان ها test framework های مختلفی طراحی و توسعه داده شده اند تا بتوانند روال نوشتن تست را برای برنامه نویسان آسان تر کنند. سه مورد از مهم ترین test framework هایی که در دات نت مورد استفاده قرار می گیرند، عبارتند از: xUnit و NUnit و MS Test که در ادامه در رابطه با آنها صحبت خواهیم کرد.
XUnit چیست؟
xUnit یک test framework است که به صورت open source و رایگان به منظور نوشتن تست در دات نت توسعه داده شده است. این test framework توسط توسعه دهنده اصلی NUnit طراحی و ایجاد گردیده است.

xUnit.Net آخرین تکنولوژی برای نوشتن unit test ها در اپلیکیشن های دات نت می باشد که می تواند به سادگی با تکنولوژی های دیگر از قبیل reSharper و codeRush و xamarin کار کند. امکان نوشتن اپلیکیشن ها با روش توسعه تست محور نیز در xUnit نیز در xUnit.Net وجود دارد.
NUnit چیست؟
علاوه بر xUnit یک test framework دیگر که در نوشتن تست در اپلیکیشن های دات نت مورد استفاده قرار می گیرد NUnit می باشد. NUnit نیز یک test framework است که برای نوشتن unit test ها مورد استفاده قرار می گیرد و می تواند با تمامی زبان های برنامه نویسی دات نت کار کند. در ابتدا NUnit بر اساس JUnit ساخته شد.

در حال حاضر production release های مربوط به NUnit قابلیت های بسیار زیادی را در خود جای داده اند و می توانند برای گستره وسیعی از نیازمندی های تست در پلتفرم های دات نت مورد استفاده قرار بگیرند.
نوشتن Assertion و بررسی Exceptionها در NUnit 3
در تست واحد، تنها اجرای کد کافی نیست؛ باید نتیجه واقعی را با نتیجه مورد انتظار مقایسه کنید. این آموزش نحوه استفاده از `Assertion`ها در NUnit 3 را برای انواع مختلف نتیجه بررسی میکند و نشان میدهد چگونه میتوان شرطهای لازم برای موفقیت یک تست را تعریف کرد. برای مثال، ممکن است بخواهید مقدار بازگشتی یک متد، وضعیت یک شیء یا نتیجه یک عملیات را بررسی کنید. همچنین، افزودن پیام خطای سفارشی مطرح میشود تا هنگام شکست تست، علت مورد انتظار روشنتر باشد و بررسی مشکل به زمان کمتری نیاز داشته باشد.
برخی از رفتارهای برنامه عمداً با ایجاد Exception همراه هستند؛ در این موارد، تست باید بررسی کند که خطا در شرایط مشخص واقعاً رخ میدهد. این آموزش نحوه Assert کردن Exceptionها را نیز پوشش میدهد و به تعداد مناسب Assertionها در هر تست میپردازد. انتخاب تعداد و نوع بررسیها به هدف تست بستگی دارد؛ تستی که چندین رفتار مستقل را بررسی میکند ممکن است تشخیص علت شکست را دشوارتر کند. با سازماندهی مناسب Assertionها، میتوانید تستهایی بنویسید که هم رفتار مورد انتظار را کنترل کنند و هم هنگام تغییر ناخواسته کد، اطلاعات مفیدتری درباره مشکل ارائه دهند.
تستهای Data Driven و مدیریت چرخه اجرای تستها
زمانی که یک متد باید با ورودیهای مختلف آزمایش شود، نوشتن تست جداگانه برای هر مقدار میتواند به تکرار زیاد کد منجر شود. این آموزش ایجاد `Data Driven Test`ها را بررسی میکند تا بتوانید دادههای متفاوت را در یک ساختار تست مدیریت کنید. همچنین، به اشتراک گذاشتن دادههای آزمایشی میان چند تست مطرح میشود. این روش برای بررسی حالتهای مرزی، ورودیهای معتبر و نامعتبر یا مقادیر گوناگون یک عملیات کاربرد دارد و کمک میکند تمرکز تستها روی تفاوت دادهها و نتایج مورد انتظار باقی بماند، نه تکرار ساختار یکسان در چند متد.
مدیریت زمان اجرای تستها نیز بخش مهمی از طراحی مجموعه تست است. در این آموزش، سازماندهی تستها در دستهبندیها و اجرای کدهای موردنیاز پیش یا پس از هر Test Class بررسی میشود. چنین تنظیماتی میتوانند برای آمادهسازی دادههای مشترک یا پاکسازی وضعیت تست به کار بروند، به شرط آنکه وابستگیهای غیرضروری میان تستها ایجاد نکنند. همچنین، اجرای تستها از طریق `Test Explorer` در Visual Studio و بررسی نمونههای مرتبط با `Regression` مطرح میشود. این مباحث به شما کمک میکنند مجموعهای از تستهای قابلمدیریت بسازید که هنگام تغییر کد، بررسی رفتارهای قبلی را منظمتر انجام دهد.
سرفصل مطالب آموزش ویدئویی Unit Testing در سی شارپ با NUnit 3
فصل اول: مقدمه دوره آموزشی- مقدمه دوره آموزشی
- ورژن های مربوط به ابزارهای استفاده شده در این آموزش
- مقدمه
- مقدمه دوره آموزشی
- بررسی اپلیکیشن مربوط به این دوره آموزشی
- ایجاد کردن یک Test Project برای با NUnit
- نوشتن اولین تست در NUnit
- اجرا کردن تست ها در Test Explorer ویژوال استودیو
- اجرا کردن تست ها در Command Line
- مقدمه
- چرا بایستی Automated Tests ایجاد کنیم؟
- مثالی از Regression
- درک کردن NUnit به عنوان یک Test Framework
- بررسی اجمالی Attribute ها در NUnit
- بررسی اجمالی Assertions در NUnit
- بررسی کردن سناریوهای مختلف تست کردن در برنامه
- بررسی کردن فازهای منطقی Arrange، Act و Assert
- اضافه کردن تست دوم
- ویژگی های تست های خوب
- مقدمه
- بررسی Assertion های از نوع Constraint Model در NUnit
- در هر تست چند Asserts باید بنویسیم؟
- Asserts کردن بر روی تساوی و یا Equality
- Assert کردن بر روی تساوی Refrence ها و یا Reference Equality
- اضافه کردن Failure Message های سفارشی
- Assert کردن بر روی مقادیر اعداد اعشاری و یا Floating Point
- Assert بر روی محتوای کالکشن ها
- Assert کردن اینکه یک Exception ایجاد و یا Thrown شده است
- مثالهای دیگری Exception ها
- مقدمه
- صرف نظر کردن از اجرا شدن تست ها و یا Iqnore کردن آنها
- سازماندهی کردن تست ها به درون دسته بندی ها
- بررسی اجمالی چرخه حیات اجرا شدن تست ها و یا Test Execution Lifecycle
- اجرا کردن کدهایی قبل و یا بعد از هر کدام از تست ها
- اجرا کردن کدهایی قبل و یا بعد از هر Test Class
- مقدمه
- فراهم کردن Test Data ها در سطح مدل
- ساده تر کردن مقادیر مورد مطلوب و یا Expected Value های یک Test Case
- به اشتراک گذاشتن Test Data ها در چندین تست
- خواندن Test Data ها از منابع خارجی و یا External Source ها
- تولید کردن Test Data ها
- ایجاد کردن Attribute های Category سفارشی
- ایجاد کردن Constraint های سفارشی






