Unit Test
مقدمه
در این فاز با Unit Test و مفهوم Code Coverage آشنا میشوید. همچنین برای کدی که در فازهای قبلی نوشتهاید، تست مینویسید و کیفیت کد خود را بیش از پیش افزایش میدهید.
مفهوم Unit Test و اهمیت آن
برای آگاهی از اهمیت نوشتن Unit Test در فرایند توسعۀ نرمافزار، لینکهای زیر را مطالعه کنید:
- Unit Testing - Important role in Software Development
- Why Is Unit Testing Important in Software Development?
- The importance of Unit Testing
- Time difference between developing with unit tests vs no tests
برای آشنایی بیشتر با مبحث Unit Test ویدیو زیر را مشاهده کنید.
مفهوم Code Coverage در Unit Testing و اهمیت آن
پس از مطالعه و درک مفهوم Unit Testing و اهمیت آن در توسعۀ نرمافزار، برای درک مفهوم Code Coverage و اهمیت آن لینکهای زیر را مطالعه کنید:
- Code Coverage - Wikipedia
- 5 Reasons You Should Care about Code Coverage
- The Importance of Code Coverage
بعد از مطالعه مطالب بالا میتوانید این مقاله که نگاه دقیقی به Test Coverage از زبان Martin Fowler است را مطالعه کنید
نوشتن Unit Test در #C با استفاده از xUnit
برای شروع کار با xUnit، پیشنهاد میشود Using xUnit to Test your C# Code و Getting Started with xUnit.net را مطالعه کنید. همچنین میتوانید نحوۀ مشاهدۀ Code Coverage را برای IDEهای Visual Studio و Rider از طریق لینکهای زیر یاد بگیرید:
- Use code coverage to determine how much code is being tested (Visual Studio)
- Analyze Coverage of Unit Tests (Rider)
برای آشنایی بهتر با xUnit مشاهده Writing tests in .NET using xUnit پیشنهاد میشود.
تاثیر اصول SOLID بر Unit Tesing
برای آگاهی از تاثیر رعایت اصول SOLID بر تستنویسی SOLID, Object Oriented Design and Unit Testing را مطالعه کنید.
آشنایی با Mock
یک تکنیک تستنویسی، Mock کردن است که در آن، قسمتی از کد را با یک پیادهسازی دلخواه جایگزین میکنیم که از آن برای شبیهسازی یک عملیات واقعی استفاده میشود. معمولا Mock کردن زمانی استفاده میشود که یک متد یا کلاس، وابستگی یا وابستگیهایی دارد که در تست ما تداخل نامطلوبی ایجاد میکند.
مثلا فرض کنید میخواهید سرویسی را تست کنید که در آن از یک
SmsSender
استفاده شدهاست. در نتیجه هر بار که آن تست را اجرا کنید، یک
SMS
نیز ارسال میشود، که این برای ما مطلوب نیست.
در این صورت، باید
SmsSender
را
Mock
کرد که دیگر
SMS
ارسال نکند، ولی خروجی مشخصی بدهد. در نتیجه میتوانیم عملکرد همان متد را تست کنیم، به جای این که بخواهیم درگیر
وابستگیهای آن شویم.
برای آشنایی بهتر با Mock و نحوۀ استفاده این تکنیک در زبان #C از لینکهای زیر کمک بگیرید:
پیشنهاد میکنیم برای مطالعه بیشتر درباره تستنویسی در #C مقالۀ Writing Unit Tests with xUnit, NSubstitute and FluentAssertions را مطالعه کنید.
نوشتن تست برای Full Text Search
در این مرحله، با استفاده از دانشی که در این فاز به دست آوردهاید، برای پروژه Full Text Search تست بنویسید. سعی کنید code coverage تست های خود را به 100% نزدیک کنید.
از اعضای دیگر تیمها بخواهید تستهای شما را Review کنند و همچنین شما نیز نگاهی به تست بقیه گروهها داشته باشید. آیا با دید یکسانی تست نوشتهاید؟ برای چه بخشی تست ننوشته بودید و دلیل آن چه چیزی بوده؟