
آموزش تست واحد Unit Testing برای برنامه نویسان سی شارپ
آموزش تست واحد Unit Testing برای برنامه نویسان سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی مباحث بنیادی Unit Testing برای برنامه نویسان سی شارپ است که با نام اصلی Basics of Unit Testing for C Sharp Developers از شرکت Pluralsight منتشر شده است.
Unit Testing چیست؟
Unit Testing فرآیند حصول اطمینان از درستی یک قطعه کد است. کدی که مورد تست قرار می گیرد ممکن است یک متد، یک گروه از اعضای یک کلاس و یا یک کامپوننت کامل باشد. از آنجا که Unit Testing نیاز به دانش مربوط به کد مورد تست دارد، اغلب توسط برنامه نویس انجام می شود. برای مثال، ممکن است یک گروه از تست ها درستی کار یک الگوریتم پیچیده را کنترل کنند.

متد TDD یا Test–Driven Development که اساس توسعه ی یک نرم افزار را بر اساس تست ها قرار میدهد، یک مثال بسیار مناسب از اهمیت Testing در توسعه ی نرم افزار است.
بعضی از مزیت های Unit Testing عبارت اند از:- اطمینان از صحت کار نرم افزار
- کمک به ساده تر شدن فرآیند ریفکتورینگ
- کمک در مستندسازی نرم افزار
نوشتن تست واحد در C# برای بررسی صحت کد
تست واحد یکی از روشهای مهم برای بررسی رفتار بخشهای مستقل یک برنامه است. در این روش، یک متد، کلاس یا جزء مشخص در شرایط تعریفشده اجرا میشود و نتیجه آن با رفتار مورد انتظار مقایسه میشود. این کار به توسعهدهنده کمک میکند خطاها را زودتر شناسایی کند و پس از تغییر کد، بررسی کند که آیا عملکرد قبلی همچنان درست است یا خیر. برای برنامهنویسان C#، یادگیری تست واحد میتواند بخشی از فرایند توسعه روزمره باشد و به افزایش اطمینان هنگام تغییر و نگهداری کد کمک کند.
نوشتن تستهای مناسب به معنای بررسی تمام جزئیات پیادهسازی نیست، بلکه باید بر رفتار مورد انتظار کد تمرکز داشته باشد. یک تست خوب شرایط مشخصی را فراهم میکند، عملیات موردنظر را اجرا میکند و نتیجه را با انتظار تعریفشده مقایسه میکند. چنین رویکردی باعث میشود تستها در صورت تغییر جزئیات داخلی، همچنان مفید باقی بمانند؛ به شرط آنکه رفتار مورد انتظار تغییر نکرده باشد. در این دوره، اصول نوشتن تست واحد در C# و روشهای سازماندهی آنها بررسی میشوند تا بتوانید تستهایی روشنتر و قابل نگهداریتر بنویسید.
استفاده از Assert و Attribute در تستهای C#
در تست واحد، Assert ها برای بررسی نتیجه اجرای کد و مقایسه آن با مقدار یا وضعیت مورد انتظار استفاده میشوند. برای مثال، میتوان بررسی کرد که یک متد مقدار مشخصی برمیگرداند، یک شرط برقرار است یا یک عملیات نتیجه مورد انتظار را ایجاد میکند. استفاده درست از Assert باعث میشود هدف هر تست روشن باشد و در صورت شکست، بتوان متوجه شد کدام انتظار برآورده نشده است. آشنایی با امکانات Assert در فریمورک تست به برنامهنویسان کمک میکند شرایط مختلف را با کد کمتر و خوانایی بیشتر بررسی کنند.
Attribute ها نیز در بسیاری از فریمورکهای تست برای مشخص کردن نقش متدها و تنظیم نحوه اجرای تستها استفاده میشوند. بسته به فریمورک مورد استفاده، میتوان با Attribute ها یک متد را بهعنوان تست معرفی کرد یا رفتارهای مربوط به مقداردهی اولیه و پاکسازی را تعریف کرد. در این آموزش، بررسی Attribute های مربوط به Unit Test و استفاده از کلاسهای Assert مورد توجه قرار میگیرد. شناخت این امکانات به شما کمک میکند ساختار تستها را بهتر سازماندهی کنید و از قابلیتهای فریمورک تست در پروژههای C# بهره ببرید.
تستهای دادهمحور و مقداردهی اولیه در Unit Testing
در برخی موارد، لازم است یک رفتار مشخص با ورودیهای مختلف آزمایش شود. تستهای دادهمحور یا Data-driven Tests این امکان را فراهم میکنند که یک سناریوی تست با مجموعهای از دادههای متفاوت اجرا شود، بدون اینکه برای هر ورودی، تست جداگانهای با ساختار مشابه نوشته شود. این روش بهویژه زمانی مفید است که یک متد باید طیف وسیعی از مقادیر یا شرایط را بهدرستی مدیریت کند. استفاده مناسب از تستهای دادهمحور میتواند از تکرار غیرضروری کد جلوگیری کند و پوشش شرایط مختلف را آسانتر سازد.
مقداردهی اولیه یا Initialization و پاکسازی نهایی یا Cleanup نیز در سازماندهی تستها اهمیت دارند. گاهی پیش از اجرای تست باید اشیا یا دادههای لازم آماده شوند و پس از پایان آزمایش، منابع یا وضعیت ایجادشده پاکسازی شود. جداسازی این مراحل از منطق اصلی تست میتواند خوانایی و قابلیت نگهداری مجموعه تستها را بهبود دهد. در این دوره، این مفاهیم در کنار اجتناب از نوشتن مستقیم مقادیر در تستها بررسی میشوند تا بتوانید ساختارهایی منظمتر ایجاد کنید و از تکرار کدهای غیرضروری در تست واحد بکاهید.
خودکارسازی تستهای C# با VSTest.Console
اجرای تستها بهصورت دستی برای مجموعههای کوچک ممکن است ساده باشد، اما با افزایش تعداد تستها، خودکارسازی اهمیت بیشتری پیدا میکند. ابزارهای اجرای تست میتوانند مجموعه تستهای تعریفشده را اجرا کنند و نتیجه را گزارش دهند تا توسعهدهنده بتواند وضعیت کد را سریعتر بررسی کند. خودکارسازی بهویژه پس از تغییرات برنامه مفید است، زیرا امکان اجرای مجدد تستها را بدون نیاز به بررسی دستی تکتک سناریوها فراهم میکند. این رویکرد میتواند بخشی از جریان کاری توسعه نرمافزار باشد و به شناسایی زودهنگام مشکلات کمک کند.
VSTest.Console یکی از ابزارهای خط فرمان برای اجرای تستهای سازگار با زیرساخت تست Visual Studio است. آشنایی با این ابزار به شما کمک میکند تستها را خارج از اجرای دستی در محیط توسعه نیز اجرا کنید و از قابلیتهای خودکارسازی در فرایند توسعه بهره ببرید. در این آموزش، خودکارسازی تستها با استفاده از VSTest.Console در کنار مباحث نوشتن و سازماندهی Unit Test بررسی میشود. این دانش برای توسعهدهندگان C# که میخواهند اجرای تستها را به بخشی منظم از کار روزمره خود تبدیل کنند، کاربردی است.
سرفصل مطالب آموزش ویدئویی Unit Testing برای برنامه نویسان سی شارپ
فصل اول: مقدمه
- مقدمه دوره آموزشی
فصل دوم: چرا به Unit Testing نیاز داریم
- معرفی Unit Testing
- ابزارهای موجود در ویژوال استودیو برای انجام Unit Testing
- چرا باید کدها را تست کنیم
- تفاوت انجام Unit Testing و تضمین کیفیت
- ابزارهای انجام Unit Testing
- که در این دوره آموزشی فرا خواهید گرفت
- جمع بندی
فصل سوم: نوشتن اولین Unit Test ها
- چه چیزی را می بایست تست کنیم
- شروع به کار
- ایجاد کردن کلاس FileProcess
- اضافه کردن پروژه Unit Testing
- بررسی قسمت های Arrange و Act و Assert در نوشتن یک Unit Test
- انجام عملیات Exception Handling در Unit Test ها
- بررسی پوشش کد و یا Code Coverage
- جمع بندی
فصل چهارم: اجتناب از نوشتن مستقیم مقادیر در Unit Test ها
- اجتناب از نوشتن مستقیم مقادیر در فلان ها با استفاده از Constant ها
- اجتناب از نوشتن مستقیم مقادیر در Unit Test ها با استفاده از Configuration File ها
- ایجاد کردن متد SetGoodFileName
- استفاده از متد SetGoodFileName
- استفاده از TestContext
- جمع بندی
فصل پنجم: عملیات مقداردهی اولیه و یا Initialization و تمیز کردن نهایی و یا Cleanup
- اهداف این فصل
- بررسی عملیات مقدار دهی اولیه و یا Initialization و تمیز کردن نهایی و یا Cleanup
- بررسی ترتیب اجرا و یا Execution Order
- متدهای Initialize و Cleanup در اسمبلی ها
- متدهای Initialize و Cleanup در کلاس ها
- متدهای Initialize و Cleanup در تست ها
- جمع بندی
فصل ششم: بررسی Attribute های مربوط به Unit Test ها
- معرفی Attribute های معمول در انجام Unit Testing
- بررسی Attribute های Description و Owner
- بررسی Attribute های Priority و TestCategory
- بررسی Attribute های و Ignore و Timeout
- بررسی DeploymentItem
- جمع بندی
فصل هفتم: استفاده از کلاس های Assert ها برای صرفه جویی در زمان
- معرفی متدهای مربوط به کلاس Assert
- ارسال یک پیام به متدهای کلاس Assert
- تست کردن مقادیر رشته ای
- تست کردن نوع Type مربوط به Object ها
- چک کردن Type مربوط به یک Object خاص
- استفاده کردن از کلاس StringAssert استفاده کردن از کلاس CollectionAssert
- بازبینی پوشش کد و یا Code Coverage
- جمع بندی
فصل هشتم: ایجاد کردن تست های داده محور و یا Data-driven Test ها
- معرفی Data-driven Test ها
- ایجاد کردن یک جدول برای نگهداری مقادیر تست ها
- ایجاد کردن متد FileExistsFromDB
- تکمیل مترادف FileExistsFromDB
- ذخیره کردن تنظیمات تست های داده محور در یک Configuration File
- جمع بندی
فصل نهم: خودکارسازی و یا Automate کردن تست ها با استفاده از ابزار VSTest.Console
- خودکار کردن تست ها
- اجرا کردن ابزار VSTest.console.exe
- ثبت کردن و یا Log کردن در یک فایل trx
- اجرا کردن یک تست خاص
- اجرا کردن تست ها بر اساس نام هایشان
- اجرا کردن تست ها بر اساس Attribute هایشان
- جمع بندی







