
آموزش معماری نرم افزارهای ASP.NET Core MVC برای تست پذیری
آموزش معماری نرم افزارهای ASP.NET Core MVC برای تست پذیری برای تست پذیری یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی معماری یک نرم افزار با ASP.NET Core MVC برای تست پذیری است که با نام اصلی Architecting an ASP.NET Core MVC Application for Unit Testability از شرکت Pluralsight منتشر شده است.
معماری نرم افزار چیست؟
ASP.NET Core 1.0، که پیشتر با نام ASP.NET 5 معرفی شده بود، بازنویسی کامل ASP.NET است که با ایدهی کاملا ماژولار بودن، تهیه شده است و از طریق آن، قابلیت به روز رسانی منظم و توزیع آسان از طریق NuGet، میسر خواهد شد.

به علاوه در آن، بسیاری از الگوهای برنامه نویسی شیءگرا مانند Dependency Injection، به صورت built-in و از ابتدا پشتیبانی میشوند. ASP.NET Core 1.0 مدل برنامه نویسی ASP.NET MVC و Web API را به صورت یکپارچه ارائه میدهد و دیگر خبری از ارائهی مجزای این ها نخواهد بود و دقیقا بر مبنای مفاهیم برنامه نویسی این دو بنا شده است.
تست نرم افزار (Testing) چیست؟
تست کردن فرآیند ارزیابی یک سیستم یا اجزای آن با قصد پیدا کردن آن است که آیا نیازمندی های مشخص شده توسط آن سیستم برآورده می شود یا خیر. به بیان ساده، تست کردن فرآیند اجرای یک سیستم برای شناسایی هر شکاف، خطا یا نیازمندی های از دست رفته در مقایسه با نیازمندی های واقعی است.

بر اساس استاندارد ANSI / IEEE 1059، تست کردن را می توان به صورت زیر تعریف کرد: فرآیند تجزیه و تحلیل یک نرم افزار با هدف شناسایی تفاوت های احتمالی بین شرایط موجود و شرایط مورد الزام (به عبارت دیگر، نقص ها، خطاها، اشکالات) و در اصل ارزیابی ویژگی های نرم افزار است. ضمناً توصیه می کنیم که از آموزش تست نرم افزار در ASP.NET Core MVC نیز دیدن کنید.
چگونه با Repository و Adapter تستپذیری دیتابیس را در ASP.NET Core افزایش دهیم؟
در آموزش Architecting an ASP.NET Core MVC Application for Unit Testability، معماری برنامه با هدف آسانتر شدن آزمایش بخشهای مختلف بررسی میشود. یکی از چالشهای رایج در تست، وابستگی مستقیم منطق برنامه به دیتابیس واقعی است؛ زیرا چنین وابستگیای میتواند اجرای آزمونها را دشوارتر و نتایج را به وضعیت محیط اجرا وابسته کند. در این آموزش، الگوهای Repository و Adapter برای مدیریت این مسئله مطرح میشوند. با استفاده از این الگوها میتوانید دسترسی به داده را از منطق اصلی جدا کنید و مرز مشخصتری میان اجزای برنامه ایجاد کنید تا هر بخش با وابستگیهای کنترلشدهتری آزمایش شود.
بخش عملی مربوط به EF Core، نوشتن Integration Test برای کلاسهای Repository را بررسی میکند و در کنار آن، استفاده از In-memory Repository برای Unit Test آموزش داده میشود. این دو رویکرد کاربرد یکسانی ندارند: آزمون یکپارچهسازی برای بررسی تعامل اجزا با یکدیگر مناسب است، در حالی که Repository درونحافظهای میتواند دادههای آزمایشی را بدون وابستگی به پایگاه داده واقعی فراهم کند. همچنین استفاده از Mock برای بررسی رفتار وابستگیها، امکان ارزیابی نحوه تعامل کلاسها را ایجاد میکند. ترکیب این روشها کمک میکند نوع آزمون را متناسب با هدف آن انتخاب کنید و ساختار کد را برای آزمایشپذیری بهتر سازمان دهید.
طراحی Business Logic و آزمایش امنیت و مسیرهای Web API
بخش مربوط به Strategy Pattern به نحوه پیادهسازی Business Logic در یک برنامه ASP.NET Core MVC میپردازد. در این الگو، میتوان رفتارهای مختلف یک عملیات را در قالب راهبردهای جداگانه تعریف کرد و انتخاب منطق مناسب را از ساختار اصلی Controller مستقلتر ساخت. در آموزش، استفاده از Calculation Strategy در برنامه و انتخاب Logic مناسب برای بارگذاری صفحه بررسی میشود. این رویکرد زمانی کاربرد دارد که یک بخش از برنامه بر اساس شرایط مختلف باید رفتار متفاوتی داشته باشد. جداسازی این رفتارها، امکان آزمایش هر راهبرد را مستقلتر میکند و تغییر قواعد تجاری را از پیچیدگیهای غیرضروری در Controller دور نگه میدارد.
آزمونپذیری در این آموزش به منطق تجاری محدود نمیشود و بخشهای امنیتی مانند Authorization و Policyها را نیز در بر میگیرد. با بررسی پیادهسازی Authorization در ASP.NET Core، نقش کنترل دسترسی در رفتار برنامه روشنتر میشود. همچنین نوشتن Integration Test برای URL Routeهای Legacy و تست کدهای مربوط به Web API مطرح میشوند تا بتوانید مسیرهای درخواست و رفتار endpointها را نیز بررسی کنید. در کنار Middlewareها و Custom Logic، این مباحث کمک میکنند اجزای مختلف یک برنامه وب را با توجه به مسئولیت واقعی آنها آزمایش کنید و تغییرات معماری را با اطمینان بیشتری ارزیابی کنید.
سرفصل مطالب آموزش ویدئویی معماری نرم افزارهای ASP.NET Core MVC برای تست پذیری
فصل اول: مقدمه دوره آموزشی
- مقدمه
فصل دوم: چه چیزی را باید تست کنیم؟
- چرا باید تست بنویسیم؟
- چه چیزی را باید تست کنیم
- طراحی برنامه برای افزایش قابلیت تست پذیری و یا Testability
- نوشتن کد با استفاده از Unit Test ها
- پوشش کد و یا Code Coverage
- جمع بندی
فصل سوم: استفاده کردن از Abstraction برای تست کردن UI
- مقدمه
- تست کردن واسط کاربری برنامه و الگوی طراحی MVC
- بررسی دقیق تست کردن برنامه های نوشته شده با ASP.NET MVC
- شروع به کار با Unit Test ها و ASP.NET MVC
- ساختن Model و Controller در ASP.NET MVC
- نوشتن Unit Test برای یک Dropdown List
- تست کردن جمع دو عدد در برنامه Web Calculator
- تست کردن یک خطا در برنامه Web Calculator
- تزریق وابستگی و یا Dependeny Injection در یک Controller در ASP.NET MVC
- ریفکتور کردن Controller و Unit Test ها برای استفاده کردن از Dependeny Injection
- بررسی Mock ها و Stub ها و Fake ها در Dependeny Injection
- استفاده کردن از Mock ها و Stub ها و Fake ها برای نوشتن Unit Test برای یک Controller
- استفاده کردن از یک Mock برای انجام Behavior Verification
- جمع بندی
- مقدمه
فصل چهارم: روش صحیح تست کردن دیتابیس با الگوهای Repository و Adapter
- چالش های موجود در نوشتن تست برای دیتابیس ها
- بررسی مشکل Object-relational Impedance Mismatch
- طراحی کردن و پیاده سازی Repository ها
- استفاده از الگوی طراحی Adapter برای رفع مشکل نوشتن تست برای دیتابیس ها
- طراحی برنامه مورد نظر
- پیاده سازی الگوی طراحی Adapter
- پیاده سازی کلاس های Repository در EF Core به صورت Reusable
- نوشتن Integration Test برای کلاس های Repository در EF Core
- پیاده سازی الگوی Service Layer
- بررسی ساختار Unit Test ها برای الگوی Service Layer و Business Logic
- نوشتن Unit Test برای Business Logic موجود در Service Layer
- استفاده از یک In-memory Repository برای انجام Unit Testing ها
- جمع بندی
فصل پنجم: استفاده کردن از الگوی طراحی Strategy برای پیاده سازی Business Logic
- مقدمه
- انجام Validation در ASP.NET با استفاده از ModelState.IsValid و الگوی طراحی Strategy
- استفاده کردن از System.ComponentModel.DataAnnotations برای انجام Validation
- پیاده سازی Validation با استفاده از الگوی طراحی Strategy
- استفاده کردن از الگوی طراحی Strategy در یک Controller
- پیاده سازی Validation با استفاده از یک Validation Attribute سفارشی
- پیاده سازی Validation با استفاده از اینترفیس IValidatableObject
- استفاده کردن از الگوی طراحی Strategy برای پیاده سازی محاسبات
- استفاده کردن از Calculation Strategy در برنامه
- جمع بندی
فصل ششم: انتخاب Logic مناسب و بارگذاری Page مورد نظر
- مقدمه
- بررسی مکانیزم مسیریابی و یا Routing در ASP.NET Core MVC
- ایجاد یک Controller Action جدید و یک Route سفارشی
- نوشتن یک Integration Test برای Route سفارشی
- نوشتن Integration Test برای URL Route های Legacy
- پیاده سازی Controller Route ها برای Legacy URL ها
- جمع بندی
فصل هفتم: تست کردن مباحث امنیتی: Authorization و Policy ها
- مقدمه
- بررسی امنیت و مباحث Authentication و Authorization و Role ها و Claim ها
- پیاده سازی امنیت در ASP.NET Core
- پیادهسازی Authorization در ASP.NET Core
- بررسی Policy-based Authorization و Authorization Handler ها در ASP.NET Core
- نوشتن Unit Test برای Authorize Attribute
- پیاده سازی Policy-based Authorization در ASP.NET Core
- نوشتن Unit Test برای Policy-based Authorization
- پیادهسازی Authorization Handler ها در ASP.NET Core
- پیکربندی Authorization Policy در ASP.NET Core
- جمع بندی
فصل هشتم: پیاده سازی Custom Logic و استفاده کردن از Middleware ها
- مقدمه
- استفاده از الگوی طراحی Strategy برای تصمیم گیری های مربوط به امنیت
- پیاده سازی IUserAuthorizationStrategy با Claims-based Authorization
- استفاده از یک Middleware سفارشی برای تکمیل کردن User Claim ها
- پیاده سازی یک Middleware سفارشی با استفاده از Unit Test ها
- پیکربندی یک Middleware سفارشی در ASP.NET Core
- مرتبط کردن Middleware و IUserAuthorizationStrategy و View ها
- جمع بندی
فصل نهم: تست کردن کدهای مربوط به Web API
- مقدمه
- نوشتن Integration Test برای Accept Header برای داده های JSON و XML
- نوشتن Unit Test برای Custom Formatted JSON Object ها
- جمع بندی


