۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه تست حداقل API در ASP.NET Core 6

ASP.NET Core 6 به ما اجازه می دهد API هایی ایجاد کنیم که حداقل فایل ها، ویژگی ها و وابستگی ها را شامل می شود. در اینجا نحوه آزمایش یک Web API حداقل آورده شده است.

ASP.NET Core 6 به ما اجازه می دهد API هایی ایجاد کنیم که حداقل فایل ها، ویژگی ها و وابستگی ها را شامل می شود. در اینجا نحوه آزمایش یک Web API حداقل آورده شده است.

ASP.NET Core 6 یک مدل میزبانی ساده را معرفی می‌کند که می‌تواند برای پیاده‌سازی APIهای سبک وزن با حذف نیاز به نوشتن کد boilerplate مورد نیاز در نسخه‌های قبلی ASP.NET Core استفاده شود.

ما در مقاله‌های قبلی اینجا و اینجا درباره نحوه شروع با حداقل APIها و نحوه استفاده از ورود به سیستم و تزریق وابستگی با حداقل APIها بحث کردیم. این مقاله نحوه آزمایش حداقل API ها را در ASP.NET Core 6 بحث می کند.

برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه Web API جدید در Visual Studio 2022 ایجاد می کنیم:

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، علامت کادری را که می‌گوید «استفاده از کنترل‌کننده‌ها…» را بردارید، زیرا در این مثال از حداقل API استفاده خواهیم کرد. “نوع احراز هویت” را به عنوان “هیچ” (پیش‌فرض) بگذارید.
  9. مطمئن شوید که چک باکس‌های «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند زیرا ما در اینجا از هیچ یک از این ویژگی‌ها استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.
طلوع توسعه سیستم های سازگار با محیط زیست

ما از این پروژه ASP.NET Core 6 Web API برای آزمایش حداقل APIها در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

ساختار راه حل برنامه کمینه Web API

در این مثال، ما دو برنامه به نام‌های MinimalAPIDemo و MinimalAPIDemoTest می‌سازیم. MinimalAPIDemo حداقل ASP.NET Core 6 Web API است که ما آزمایش خواهیم کرد و MinimalAPITests برنامه آزمایشی است. در مثال ما، MinimalAPITests شامل یک روش تست برای تست MinimalAPIDemo API است.

ساختار راه حل تکمیل شده به این صورت است:

minimal api demo 01

شکل ۱. ساختار راه حل کامل برای MinimalAPIDemo.

یک حداقل Web API در ASP.NET Core 6 ایجاد کنید

بیایید اکنون حداقل Web API خود را در ASP.NET Core 6 ایجاد کنیم. نام آن را CustomerAPI می گذاریم. این API مشتری دارای فایل‌های زیر خواهد بود:

  • مشتری (این نشان دهنده کلاس مدل است)
  • ICustomerRepository (این نشان دهنده رابط مخزن مشتری است)
  • CustomerRepository (این کلاس مخزن مشتری را نشان می دهد که رابط ICustomerRepository را پیاده سازی می کند)

کلاس مدل مشتری

یک فایل جدید به نام Customer.cs ایجاد کنید و کد زیر را به آن بدهید.

namespace MinimalAPIDemo
{
    public class Customer
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Phone { get; set; }
    }
}

رابط ICustomerRepository

اکنون یک فایل با نام ICustomerRepository.cs ایجاد کنید و این کد را وارد کنید.

namespace MinimalAPIDemo
{
    public interface ICustomerRepository
    {
        public Task<List<Customer>> GetCustomers();
    }
}

کلاس CustomerRepository

بعد فایلی به نام CustomerRepository.cs ایجاد کنید و کد زیر را وارد کنید.

namespace MinimalAPIDemo
{
    public class CustomerRepository : ICustomerRepository
    {
        private readonly List<Customer> _authors;
        public CustomerRepository()
        {
            _authors = new List<Customer>
            {
                new Customer
                {
                    Id = 1,
                    FirstName = "Joydip",
                    LastName = "Kanjilal",
                    Address = "ABC Hills",
                    City = "Hyderabad",
                    Country= "India",
                    Phone = "0123456789"
                },
                new Customer
                {
                    Id = 2,
                    FirstName = "Anand",
                    LastName = "Narayanaswamy",
                    Address = "XYZ Hills",
                    City = "Thiruvananthapuram",
                    Country= "India",
                    Phone = "1234567890"
                },
                new Customer
                {
                    Id = 3,
                    FirstName = "Charles",
                    LastName = "Fisher",
                    Address = "Dawson Road",
                    City = "New York ",
                    Country= "US",
                    Phone = "1234567890"
                }
            };
        }
        public async Task<List<Customer>> GetCustomers()
        {
            return await Task.FromResult(_authors);
        }
    }
}

فایل Program.cs

کد زیر را در فایل Program.cs برای ایجاد نقطه پایانی بنویسید.

app.MapGet("/customers", async (ICustomerRepository customerRepository) => await customerRepository.GetCustomers());

برای سادگی، در این مثال فقط یک نقطه پایانی ایجاد می کنیم. یک نمونه از نوع ICustomerRepository را به عنوان یک سرویس با محدوده مانند شکل زیر اضافه کنید.

builder.Services.AddScoped<ICustomerRepository, CustomerRepository>();

شما همچنین باید یک کلاس جزئی به نام Program اضافه کنید. این به این دلیل است که فایل Program.cs در یک برنامه کلاس خصوصی کامپایل می شود که از خارج از اسمبلی قابل دسترسی نیست.

public partial class Program { }

این کلاس جزئی، کلاس Program را برای هر پروژه ای که به این اسمبلی ارجاع می دهد، قابل دسترسی می کند. کد منبع کامل فایل Program.cs برای مرجع شما در زیر آورده شده است.

using MinimalAPIDemo;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<ICustomerRepository, CustomerRepository>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.MapGet("/customers", async (ICustomerRepository customerRepository) => await customerRepository.GetCustomers());
app.Run();
public partial class Program { }

یک پروژه آزمایشی Web API حداقل در ASP.NET Core 6 ایجاد کنید

یک پروژه آزمایشی Xunit با نام MinimalAPIDemo.Tests ایجاد کنید و فایل آزمایش واحد پیش فرض را به MinimalAPITests.cs تغییر نام دهید. اینجا جایی است که باید روش های تست خود را بنویسید. در این مثال، ما فقط یک روش آزمایشی برای آزمایش نقطه پایانی که قبلا ایجاد کرده بودیم ایجاد می‌کنیم.

JDK 23: ویژگی های جدید در جاوا 23

حالا اجازه دهید یک روش آزمایشی به نام GetAllCustomersTest با کد زیر بنویسیم.

[Fact]
public async void GetAllCustomersTest()
{
   await using var application = new WebApplicationFactory<Program>();
   using var client = application.CreateClient();
   var response = await client.GetAsync("/customers");
   var data = await response.Content.ReadAsStringAsync();
   Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

کد منبع کامل کلاس MinimalAPITests برای مرجع شما در زیر آورده شده است.

using Microsoft.AspNetCore.Mvc.Testing;
using System.Net;
using Xunit;
namespace MinimalAPIDemo.Tests
{
    public class MinimalAPITests
    {
        [Fact]
        public async void GetAllCustomersTest()
        {
            await using var application = new
            WebApplicationFactory<Program>();
            using var client = application.CreateClient();
            var response = await client.GetAsync("/customers");
            var data = await response.Content.ReadAsStringAsync();
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
    }
}

هنگامی که روش آزمایش را اجرا می کنید، پاسخ نقطه پایانی /customers باید همانطور که در شکل ۲ در زیر نشان داده شده است ظاهر شود.

نحوه پیاده سازی احراز هویت JWT در ASP.NET Core

minimal api demo 02

شکل ۲. روش تست MinimalAPITests در عمل.

این یک پیاده‌سازی حداقلی است، ما از یک پایگاه داده یا یک زمینه داده استفاده نکرده‌ایم، بلکه صرفاً از یک کلاس مخزن ساده با چند عنصر داده ایستا استفاده کرده‌ایم – فقط برای نشان دادن اینکه چگونه می‌توانیم حداقل API را بسازیم و آنها را در ASP آزمایش کنیم. NET Core 6. در پست‌های بعدی اینجا، در مورد حداقل APIها چیزهای بیشتری برای گفتن خواهم داشت.