
آموزش روش های صحیح تست کدهای EF Core
آموزش روش های صحیح تست کدهای EF Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی اصول نوشتن تست برای Entity Framework Core است که با نام اصلی Testing with EF Core از شرکت Pluralsight منتشر شده است.
انجام تست در EF Core با استفاده از In-Memory Database
جالب است بدانید که تکنولوژی EF Core که به عنوان یک ORM امروزه توسط بسیاری از اپلیکیشن های نوشته شده با تکنولوژی NET Core. مورد استفاده قرار می گیرد دارای قابلیتی است که اجازه می دهد یک database درون حافظه ای و یا in-memory database و مکانیزم تست کردن نرم افزار به سادگی انجام شود. چند نکته در رابطه با database درون حافظه ای EF Core برای انجام unit testing را باید بدانید.

- این database به صورت رابطه ای و یا relational کار نمی کند.
- از تراکنش ها پشتیبانی نمی شود.
- امکان اجرا کردن دستورات SQL خام وجود ندارد.
- این نوع database سرعت بسیار پایینی دارند و perfomance آن خیلی کم است.
انجام تست واحد و یا unit testing بر روی یک تکه کد که داده ها را از database خوانده و یا بر روی آن می نویسد چالش های زیادی را پیش روی برنامه نویسان قرار می دهد. یکی از روش هایی که بسیار مورد استفاده قرار می گرفت test double ها و یا استفاده کردن از mock ها و یا fake ها بود. استفاده کردن از تکنیک mock کردن برای DbContext و یا حتی IQueryable می تواند بسیار دشوار باشد. به همین دلیل در زمان تست کردن DbContext بهتر است که از database درون حافظه ای EF Core استفاده کنیم. این database درون حافظه ای هیچ وابستگی به رفتار های database اصلی برنامه ندارد. فقط به منظور تست کردن مورد استفاده قرار می گیرد.
چرا تست کردن کدهای مبتنی بر EF Core اهمیت دارد؟
EF Core یک ORM برای برنامههای .NET است که ارتباط میان کدهای برنامه و Database را سادهتر میکند. با وجود این، درست کار کردن کدهای مبتنی بر EF Core تنها به اجرای بدون خطای متدها محدود نمیشود؛ نحوه تبدیل عبارتها به Query، رفتار عملیات ذخیرهسازی و تعامل با دادهها نیز اهمیت دارند. نوشتن تست برای این بخشها به توسعهدهندگان کمک میکند مشکلات را زودتر شناسایی کنند و هنگام تغییر کد، از عملکرد مورد انتظار برنامه اطمینان بیشتری به دست آورند.
تست کردن کدهای مرتبط با Database نیازمند انتخاب روشی متناسب با هدف تست است. برخی تستها میتوانند رفتار یک بخش کوچک از کد را بررسی کنند، در حالی که برخی دیگر برای ارزیابی تعامل با یک موتور پایگاه داده واقعی مناسبتر هستند. در این آموزش با رویکردهای مختلف تست در EF Core آشنا میشوید و یاد میگیرید چرا تفاوت میان محیط تست و محیط واقعی اجرا میتواند بر نتیجه آزمونها تأثیر بگذارد. این شناخت برای طراحی تستهای قابلاعتماد در پروژههای مبتنی بر .NET اهمیت دارد.
تفاوت تست با EF Core InMemory و SQLite
EF Core InMemory یک ارائهدهنده برای نگهداری دادهها در حافظه است که امکان اجرای تست بدون نیاز به راهاندازی یک Database معمولی را فراهم میکند. استفاده از این روش میتواند برای بررسی برخی رفتارهای کد و اجرای سریع تستها مناسب باشد، اما نباید آن را معادل یک پایگاه داده رابطهای در نظر گرفت. رفتارهای مربوط به Queryها، محدودیتهای داده و عملیات پایگاه داده ممکن است با محیط واقعی تفاوت داشته باشند؛ بنابراین، نتیجه موفق یک تست InMemory لزوماً به معنای عملکرد صحیح کد در همه شرایط نیست.

SQLite گزینه دیگری برای تست کدهای EF Core است که امکان کار با یک Database رابطهای را فراهم میکند. این ویژگی باعث میشود برخی رفتارهای مرتبط با پایگاه داده واقعی بهتر از طریق تستها بررسی شوند، هرچند SQLite نیز با سایر موتورهای پایگاه داده تفاوتهایی دارد. انتخاب میان InMemory و SQLite باید بر اساس نوع رفتار مورد بررسی انجام شود. در این آموزش، هر دو رویکرد بررسی میشوند تا بتوانید محدودیتهای آنها را بشناسید و برای نیازهای مختلف تست، ابزار مناسبتری انتخاب کنید.
چگونه تستهای EF Core قابلاعتمادتر بنویسیم؟
قابلیت اطمینان تستها به این بستگی دارد که آیا شرایط اجرای آنها بهاندازه کافی با رفتار مورد انتظار برنامه هماهنگ است یا خیر. اگر تستها فقط در یک محیط سادهشده اجرا شوند، ممکن است بعضی خطاهای مرتبط با تعامل با Database شناسایی نشوند. به همین دلیل، هنگام طراحی تستهای EF Core باید مشخص کنید که هدف، بررسی منطق کد است یا ارزیابی رفتار آن در برابر یک پایگاه داده رابطهای. تفکیک این اهداف به انتخاب روش تست و تفسیر درست نتایج کمک میکند.
همچنین بهتر است تستها به شکلی نوشته شوند که نتیجه آنها قابل تکرار و تحلیل باشد. استفاده از دادههای مشخص، بررسی دقیق خروجی عملیات و توجه به تفاوت ارائهدهندگان Database میتواند کیفیت فرایند تست را بهبود دهد. در این دوره، با شروع کار با تستهای EF Core، استفاده از InMemory برای Unit Testing و بهکارگیری SQLite برای افزایش قابلیت اطمینان آشنا میشوید. این مباحث به شما کمک میکنند محدودیتهای هر روش را بهتر درک کنید و راهبرد مناسبی برای تست بخشهای مختلف برنامه انتخاب کنید.
سرفصل مطالب آموزش ویدئویی روش های صحیح تست کدهای EF Core
فصل اول: مقدمه دوره آموزشی
- مقدمه دوره آموزشی
فصل دوم: شروع به کار با تست در EF Core
- مقدمه
- پیش نیاز دوره آموزشی
- بررسی پیش نیاز های تست نرم افزار
- انجام Unit Testing با EF Core
- بررسی عملی یک اپلیکیشن
- جمع بندی
فصل سوم: انجام Unit Testing بر روی کد ها با استفاده از EF Core InMemory
- مقدمه
- بررسی EF Core و InMemory Database Provider
- شروع به کار با تست ها با استفاده از InMemory Database Provider
- انجام Unit Testing به همراه الگوی Arrange و Act و Assert
- نوشتن اولین تست با استفاده از InMemory Database Provider
- نوشتن عملی تست های بیشتر
- ایزوله کردن عملی تست ها
- بهبود تست ها با استفاده از چندین DbContext
- استفاده کردن عملی از چندین DbContext
- انجام Mocking و محدودیت های آن در استفاده از InMemory Database Provider
- تست کردن عملی refresh all integrity
- مزایا و معایب استفاده کردن از InMemory Database Provider
فصل چهارم: بهبود قابلیت اطمینان EF Core با استفاده از SQLite
- مقدمه
- معرفی کردن SQLite
- انجام عملی Unit Testing با استفاده از SQLite
- استفاده از چندین DbContext
- تست کردن عملی Referential Integrity
- اضافه کردن عملی EF Core Logging
- پیاده سازی Logging در Test Explorer
- محدودیت های SQLite
- جمع بندی







