
آموزش تست واحد Unit Testing با AutoFixture
آموزش تست واحد Unit Testing با AutoFixture یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی Unit Test های بهتر با AutoFixture است که با نام اصلی Better .NET Unit Tests with AutoFixture Get Started از شرکت Pluralsight منتشر شده است.
Unit Testing چیست؟
Unit Testing فرآیند حصول اطمینان از درستی یک قطعه کد است. کدی که مورد تست قرار می گیرد ممکن است یک متد، یک گروه از اعضای یک کلاس و یا یک کامپوننت کامل باشد. از آنجا که Unit Testing نیاز به دانش مربوط به کد مورد تست دارد، اغلب توسط برنامه نویس انجام می شود. برای مثال، ممکن است یک گروه از تست ها درستی کار یک الگوریتم پیچیده را کنترل کنند. متد TDD یا Test–Driven Development که اساس توسعه ی یک نرم افزار را بر اساس تست ها قرار میدهد، یک مثال بسیار مناسب از اهمیت Testing در توسعه ی نرم افزار است.
بعضی از مزیت های Unit Testing عبارت اند از:

- اطمینان از صحت کار نرم افزار
- کمک به ساده تر شدن فرآیند ریفکتورینگ
- کمک در مستندسازی نرم افزار
ضمناً توصیه می کنیم که از آموزش تست واحد Unit Testing برای برنامه نویسان سی شارپ
استفاده کنید. AutoFixture چیست؟
ابزار AutoFixture یک Open-source Library می باشد که برای نوشتن تست در دات نت فریم ورک طراحی شده است. با استفاده از این ابزار فاز Arrange از نوشتن یک تست (همانطور که می دانید یک Unit Test از سه فاز Arrange - Act - Assert تشکیل شده است.) بسیار ساده تر شده و این موضوع خود باعث افزایش قابلیت نگهداری یک تست می شود.
هدف اصلی AutoFixture اجازه دادن به برنامه نویس برای متمرکز شدن روی چیزی است که قصد تست کردن آن را دارد. به این ترتیب دیگر وظیفه ی راه اندازی کردن سناریو تست و یا اصطلاحاً Test Scenario از برنامه نویس سلب شده و به AutoFixture داده می شود.
AutoFixture چیست و چه کاربردی در تست واحد دارد؟
AutoFixture یک کتابخانه در اکوسیستم .NET است که برای سادهتر کردن آمادهسازی دادهها و اشیای موردنیاز در تستها استفاده میشود. هنگام نوشتن Unit Test، گاهی ساخت یک شیء نیازمند مقداردهی چندین پراپرتی یا ایجاد وابستگیهای متعدد است. اگر این کار برای هر تست بهصورت دستی تکرار شود، حجم کد افزایش پیدا میکند و نگهداری مجموعه تستها دشوارتر میشود. AutoFixture میتواند بخشی از این کار را خودکار کند و به توسعهدهندگان کمک کند تستهایی با کد کمتر و تمرکز بیشتر بر رفتار مورد بررسی بنویسند.
هدف از استفاده از AutoFixture حذف نیاز به طراحی تست مناسب نیست، بلکه کاهش کدهای تکراری مربوط به آمادهسازی دادههاست. با استفاده از این کتابخانه میتوان اشیا و مقادیر موردنیاز تست را بدون تعیین دستی تمام جزئیات ایجاد کرد. این رویکرد بهویژه در تستهایی که به مدلهای داده پیچیده یا چندین ورودی نیاز دارند، مفید است. درک نحوه کار AutoFixture به برنامهنویسان .NET کمک میکند ساختار تستهای خود را سادهتر کنند و زمان بیشتری را به بررسی رفتار واقعی کد اختصاص دهند.
ایجاد دادههای ناشناس در Unit Testing با AutoFixture
دادههای ناشناس یا Anonymous Test Data به مقادیری گفته میشود که برای اجرای یک تست موردنیاز هستند، اما مقدار دقیق آنها موضوع اصلی آزمایش نیست. برای مثال، ممکن است هدف تست بررسی رفتار یک متد در برابر یک شیء معتبر باشد، نه آزمایش مقدار مشخصی از تمام پراپرتیهای آن شیء. در چنین شرایطی، تعیین دستی همه مقادیر میتواند باعث افزایش کدهای غیرضروری شود. AutoFixture با ایجاد خودکار دادهها و اشیا، به سادهتر شدن آمادهسازی ورودیهای تست کمک میکند.
استفاده از دادههای ناشناس میتواند تمرکز تست را روی همان رفتار موردنظر حفظ کند و وابستگی غیرضروری به جزئیات دادههای آزمایشی را کاهش دهد. البته اگر مقدار خاصی برای بررسی یک شرط ضروری باشد، بهتر است همان مقدار بهصورت صریح تعیین شود تا هدف تست روشن باقی بماند. در این آموزش، ایجاد Anonymous Test Data با AutoFixture بررسی میشود تا بتوانید تشخیص دهید چه زمانی تولید خودکار دادهها مفید است و چگونه از آن برای کاهش کدهای تکراری در تستهای .NET استفاده کنید.
سفارشیسازی ایجاد اشیا در AutoFixture
اگرچه تولید خودکار دادهها یکی از قابلیتهای مفید AutoFixture است، اما در برخی تستها به اشیا یا مقادیری نیاز دارید که شرایط مشخصی داشته باشند. برای مثال، ممکن است یک شیء برای معتبر بودن نیازمند مقادیر خاصی باشد یا تست به وضعیتی وابسته باشد که با دادههای تصادفی یا پیشفرض ایجاد نمیشود. در این شرایط، سفارشیسازی فرایند ایجاد اشیا اهمیت پیدا میکند. این قابلیت به توسعهدهنده اجازه میدهد از مزایای تولید خودکار دادهها بهره ببرد و در عین حال، بخشهای ضروری تست را تحت کنترل داشته باشد.
سفارشیسازی مناسب باعث میشود دادههای ایجادشده با نیازهای سناریوی تست هماهنگ باشند، بدون اینکه لازم باشد تمام اشیا از ابتدا بهصورت دستی ساخته شوند. این موضوع بهویژه در پروژههایی که مدلهای پیچیده یا وابستگیهای متعدد دارند، میتواند حجم کد آمادهسازی را کاهش دهد. در این دوره، نحوه سفارشی کردن فرایند ایجاد اشیا با AutoFixture بررسی میشود. آشنایی با این قابلیت به شما کمک میکند میان تولید خودکار دادهها و کنترل دقیق شرایط تست تعادل برقرار کنید و تستهایی متناسب با نیاز پروژه بنویسید.
بهبود قابلیت نگهداری تستهای .NET با AutoFixture
قابلیت نگهداری تستها به این معناست که مجموعه تستها بتواند همراه با تغییرات نرمافزار بهسادگی اصلاح و توسعه پیدا کند. تستهایی که مقداردهیهای تکراری و کدهای کماهمیت زیادی دارند، ممکن است در طول زمان دشوارتر قابل نگهداری شوند. AutoFixture با سادهسازی فرایند ساخت دادهها و اشیا میتواند حجم این کدها را کاهش دهد و باعث شود منطق اصلی تست واضحتر دیده شود. این مزیت به توسعهدهندگان کمک میکند هنگام بررسی یک تست، سریعتر متوجه شوند چه رفتاری قرار است ارزیابی شود.
کاهش کدهای تکراری بهتنهایی تضمینکننده کیفیت تست نیست؛ تستها همچنان باید رفتار مشخصی را بررسی کنند و نتیجه مورد انتظار را بهروشنی بیان کنند. استفاده از AutoFixture زمانی بیشترین فایده را دارد که تولید دادهها را از منطق اصلی آزمایش جدا کند و در عین حال، شرایط مهم تست را قابلکنترل نگه دارد. در این آموزش پیشرفته، نوشتن کدهای کمتر و افزایش قابلیت نگهداری تستها در کنار ایجاد دادههای ناشناس و سفارشیسازی ساخت اشیا بررسی میشود. این مباحث برای توسعهدهندگانی مناسب است که با Unit Testing در .NET آشنا هستند و میخواهند ساختار تستهای خود را بهبود دهند.
سرفصل مطالب آموزش ویدئویی Unit Testing نرم افزار و AutoFixture
فصل اول: معرفی AutoFixture
- مقدمه
- مزایای استفاده از AutoFixture
- ساده تر شدن فاز Arrange تست ها بررسی Anonymous Test Data ها
- پشتیبانی از Testing Framework های مختلف
- معرفی کلاس Fixture
- شروع به کار در ویژوال استودیو
- جمع بندی
فصل دوم; ایجاد کردن داده های بی نام و یا Anonymous Test Data برای تست ها
- مقدمه
- ایجاد کردن Anonymous Test Data های رشته ای
- ایجاد کردن Anonymous Test Data های عددی
- ایجاد کردن Anonymous Test Data های تاریخی
- ایجاد کردن دنباله ای از اعداد به عنوان Anonymous Test Data
- ایجاد کردن فلان ها به عنوان Anonymous Test Data
- ایجاد کردن مجموعه ای از Custom Object ها به عنوان Anonymous Test Data
- ایجاد کردن Custom Object هایی که Data Annotation دارند
- ایجاد کردن دنباله ای از Custom Object ها
- جمع بندی
فصل سوم: سفارشی کردن فرآیند ایجاد اشیا
- مقدمه
- سفارشی کردن اشیای جداگانه از کلاس Fixture
- سفارشی کردن روند ساخته شدن Object های تک
- بررسی خط لوله و یا Pipeline مربوط به AutoFixture
- سفارشی کردن خط لوله مربوط به AutoFixture
- جمع بندی
فصل چهارم: نوشتن کدهای کمتر برای تست ها و افزایش قابلیت نگهداری تست ها
- مقدمه
- انجام ریفکتورینگ با داده های معمولی تست ها
- نوشتن تست هایی که از لحاظ ریفکتورینگ ایمن هستند
- ایجاد کردن تست های پارامتری با استفاده از Anonymous Test Data در xUnit.net
- انجام عملیات Mocking به صورت خودکار با استفاده از Moq
- انجام عملیات Mocking به صورت خودکار با استفاده از Rhino
- ترکیب فرایند خودکار سازی Mocking و دادههای خودکار در فریم ورک xUnit.net
- جمع بندی







