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

Techboy

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

نحوه استفاده از Fluent Assertions در سی شارپ

وقتی تست های واحد با شکست مواجه می شوند، باید به وضوح دلیل آن را توضیح دهند. از کتابخانه Fluent Assertions برای نوشتن روش های آزمون واحد که ساده، خوانا، مختصر و گویا هستند، استفاده کنید.

وقتی تست های واحد با شکست مواجه می شوند، باید به وضوح دلیل آن را توضیح دهند. از کتابخانه Fluent Assertions برای نوشتن روش های آزمون واحد که ساده، خوانا، مختصر و گویا هستند، استفاده کنید.

تست واحد بخشی جدایی ناپذیر از چرخه عمر توسعه نرم افزار است که به ما امکان می دهد مفروضات ضمنی و صریح در کد برنامه خود را تأیید کنیم. وقتی از تست های واحد به درستی استفاده کرده باشید، برنامه شما خطاهای کمتری خواهد داشت. Fluent Assertions یک کتابخانه C# محبوب است که می‌تواند روش‌های تست واحد شما را با ساده و رسا کردن آنها بهبود بخشد.

در یک پست قبلی، درباره نحوه عملکرد رابط‌های روان و زنجیره روش در سی شارپ بحث کردیم. در این مقاله، نحوه کار با کتابخانه Fluent Assertions را بررسی خواهیم کرد. رایانه شما باید به ویژوال استودیو ۲۰۲۲ مجهز باشد تا با نمونه کدهای نشان داده شده در این پست کار کند. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه آزمایشی xUnit در ویژوال استودیو ایجاد کنید

ابتدا، اجازه دهید یک پروژه آزمایشی xUnit در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را برای ایجاد یک پروژه آزمایشی xUnit دنبال کنید.

  1. Visual Studio IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “xUnit Test Project” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بعدی را کلیک کنید.
  7. در پنجره “اطلاعات اضافی” نشان داده شده در ادامه، “NET 7.0 (Standard Term Support)” را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
  8. روی ایجاد کلیک کنید.

ما از این پروژه برای کار با Fluent Assertions در بخش‌های زیر استفاده خواهیم کرد.

نحوه انتخاب یک پلت فرم داده جریانی

بسته Fluent Assertions NuGet را نصب کنید

اکنون بسته NuGet مورد نیاز را به پروژه خود اضافه کنید. برای انجام این کار، پروژه را در پنجره Solution Explorer انتخاب کنید، سپس راست کلیک کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته Fluent Assertions NuGet را جستجو کرده و آن را نصب کنید.

همچنین، می‌توانید بسته را از طریق کنسول NuGet Package Manager با وارد کردن دستور زیر نصب کنید.

PM> Install-Package FluentAssertions

ادعاهای روان چیست؟

Fluent Assertions یک کتابخانه ادعایی محبوب است که در C# موجود است. Fluent Assertions به شما کمک می کند تا اظهارات را در روش های آزمون واحد بنویسید که هم ساده و هم گویا هستند. این کتابخانه شامل مجموعه‌ای از روش‌های توسعه است که می‌توانید از آنها برای مشخص کردن نتیجه مطلوب یک روش تست واحد به روشی طبیعی استفاده کنید که درک آن آسان است، اما کد شما را نیز تمیز و ساده نگه می‌دارد.

قطعه کد زیر نشان می‌دهد که چگونه می‌توانید یک روش آزمون واحد در سی شارپ بنویسید و از کتابخانه Fluent Assertions استفاده کنید تا روش آزمون واحد را رسا، مختصر و قابل درک کنید.

[Fact]
public void Verify_That_A_String_Begins_Ends_And_Contains_A_Particular_Phase()
{
    string actual = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var result = actual.Should().StartWith("ABCDE").
    And.EndWith("XYZ").And.Contain("JK").And.HaveLength(26);
}

ما چندین نمونه کد دیگر را با استفاده از Fluent Assertions در بخش‌های بعدی بررسی خواهیم کرد.

شناسایی موضوع با استفاده از Fluent Assertions Be() در C#

یکی از ویژگی‌های برجسته Fluent Assertions، امکان استخراج نام موضوع و سپس استفاده از آن در عدم موفقیت است. قطعه کد زیر نشان می دهد که چگونه می توان این کار را انجام داد.

[Fact]
public void Verify_Subject_Identification()
{
    string username = "joydipkanjilal@yahoo.com";
    username.Should().Be("joydipkanjilal@yahoo.com");
}

مثال کد زیر نشان می‌دهد که چگونه می‌توانید مقدار یک متغیر عدد صحیح را تأیید کنید:

[Fact]
public void Verify_The_Value_Of_An_Integer()
{
    int number = 10;
    number.Should().Be(10);
}

می‌توانید همانطور که در قطعه کد زیر نشان داده شده است، یک پیام اضافه در متد Be() اضافه کنید:

[Fact]
public void Verify_The_Value_Of_An_Integer_Variable() {
    int n = 10;
    n.Should().Be(1, "since the value of variable number is not correct");
}

اظهارات آزمون واحد پایه را در سی شارپ بنویسید

کلاس زیر را در نظر بگیرید.

public class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; } = string.Empty;
    public string Address { get; set; } = string.Empty;
}

شما می توانید اظهارات را بر روی انواع مرجع اعمال کنید، مانند نمونه ای از کلاس Author در مثال ما، همانطور که در زیر نشان داده شده است.

[Fact]
public void Verify_The_Value_And_Type_Of_A_Reference_Type()
{
    Author author1 = new Author();
    Author author = new Author();
    author.Id = 1;
    author.FirstName = "Joydip";
    author.LastName = "Kanjilal";
    author.Address = "Hyderabad, INDIA";
    author.Should().NotBeNull();
    author.Should().BeOfType < Author > ();
}

می‌توانید همانطور که در قطعه کد زیر نشان داده شده است، روی اشیاء رشته اعمال کنید.

[Fact]
public void Verify_The_Value_Of_A_String_Object()
{
    string str = "Hello World";
    str.Should().NotBeNullOrEmpty();
    str.Should().NotBeNullOrWhiteSpace();
}

برای آزمایش مقدار متغیر Boolean در روش آزمایش xUnit خود، می‌توانید از مثال کد زیر استفاده کنید.

[Fact]
public void Verify_The_Value_Of_A_Boolean_Variable()
{
    bool isTrue = true;
    isTrue.Should().BeTrue();
    isTrue = false;
    isTrue.Should().NotBe(false);
}

می‌توانید در روش‌های آزمون واحد خود، همانطور که در مثال کد زیر نشان داده شده است، اعداد صحیح را اعمال کنید.

[Fact]
public void Verify_The_Value_Of_An_Integer_Variable() {
    int i = 100;
    i.Should().Be(100);
    i.Should().BePositive();
    i.Should().BeGreaterThanOrEqualTo(100);
    i.Should().BeGreaterThan(50);
    i.Should().BeLessThanOrEqualTo(1000);
    i.Should().BeLessThan(500);
    i.Should().BeInRange(1, 100);
}

مقدار خصوصیات یک شی را در سی شارپ بررسی کنید

قطعه کد ارائه شده در زیر نشان می‌دهد که چگونه می‌توانید ISBN، عنوان و نام نویسنده کتاب را بدون با استفاده از Fluent Assertions تأیید کنید.

[Fact]
public void Verify_The_ISBN_Of_A_Book_Without_Fluent_Assertions()
{
    string isbn = "978-9388511605";
    string author = "Joydip Kanjilal";
    string title = "Mastering C# 8.0";
    Assert.Equal("9780321146533", isbn);
    Assert.Equal("Joydip Kanjilal", author);
    Assert.Equal("Mastering C# 8.0", title);
}

و در اینجا یک قطعه کد وجود دارد که نشان می‌دهد چگونه می‌توانید روش آزمون واحد قبلی را با استفاده از Fluent Assertions بازنویسی کنید تا کد خود را پاک‌تر و واضح‌تر کنید.

[Fact]
public void Verify_The_ISBN_Author_Name_And_Title_Of_A_Book_With_Fluent_Assertions()
{
    string isbn = "978-9388511605";
    string author = "Joydip Kanjilal";
    string title = "Mastering C# 8.0";
    Assert.Equal("978-9388511605", isbn);
    Assert.Equal("Joydip Kanjilal", author);
    Assert.Equal("Mastering C# 8.0", title);
}

کد مثال کامل Fluent Assertion

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

using FluentAssertions;
namespace FluentAssertionsDemo
{
    public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; } = string.Empty;
        public string Address { get; set; } = string.Empty;
    }
    public class FluentAssertionsUnitTests
    {

        [Fact]
        public void Verify_Subject_Identification()
        {
            string username = "joydipkanjilal@yahoo.com";
            username.Should().Be("joydipkanjilal@yahoo.com");
        }

        [Fact]
        public void Verify_The_Value_Of_An_Integer_Variable()
        {
            int i = 100;
            i.Should().Be(100);
            i.Should().BePositive();
            i.Should().BeGreaterThanOrEqualTo(100);
            i.Should().BeGreaterThan(50);
            i.Should().BeLessThanOrEqualTo(1000);
            i.Should().BeLessThan(500);
            i.Should().BeInRange(1, 100);
        }

        [Fact]
        public void Verify_The_Value_And_Type_Of_A_Reference_Type()
        {
            Author author1 = new Author();
            Author author = new Author();
            author.Id = 1;
            author.FirstName = "Joydip";
            author.LastName = "Kanjilal";
            author.Address = "Hyderabad, INDIA";
            author.Should().NotBeNull();
            author.Should().BeOfType<Author>();
        }

        [Fact]
        public void Verify_The_Value_Of_A_String_Object()
        {
            string str = "Hello World";
            str.Should().NotBeNullOrEmpty();
            str.Should().NotBeNullOrWhiteSpace();
        }

        [Fact]
        public void Verify_The_Value_Of_A_Boolean_Variable()
        {
            bool isTrue = true;
            isTrue.Should().BeTrue();
            isTrue = false;
            isTrue.Should().NotBe(false);
        }

        [Fact]
        public void Verify_That_A_String_Begins_Ends_And_Contains_A_Particular_Phase()
        {
            string actual = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            var result = actual.Should().StartWith("ABCDE").And.EndWith("XYZ").
                And.Contain("JK").And.HaveLength(26);
        }

        [Fact]
        public void Verify_The_ISBN_Author_Name_And_Title_Of_A_Book_Without_Fluent_Assertions()
        {
            string isbn = "978-9388511605";
            string author = "Joydip Kanjilal";
            string title = "Mastering C# 8.0";
            Assert.Equal("9780321146533", isbn);
            Assert.Equal("Joydip Kanjilal", author);
            Assert.Equal("Mastering C# 8.0", title);
        }

        [Fact]
        public void Verify_The_ISBN_Author_Name_And_Title_Of_A_Book_With_Fluent_Assertions()
        {
            string isbn = "978-9388511605";
            string author = "Joydip Kanjilal";
            string title = "Mastering C# 8.0";
            Assert.Equal("978-9388511605", isbn);
            Assert.Equal("Joydip Kanjilal", author);
            Assert.Equal("Mastering C# 8.0", title);
        }
    }
}

نتیجه گیری

اظهارات روان می تواند به شما کمک کند تا کیفیت روش های آزمون واحد خود را بهبود بخشید، و روش های آزمون خود را گویا و قابل درک آسان می کند. می‌توانید از اسناد رسمی درباره ادعاهای روان اطلاعات بیشتری کسب کنید. اگر تست‌های واحد خود را به زبان #C می‌نویسید، حتماً باید کتابخانه Fluent Assertions را امتحان کنید. من نشان خواهم داد که چگونه می توانیم ادعاهای سفارشی را در تست های واحد در پست آینده در اینجا پیاده سازی کنیم.