برنامه نویسی

سی شارپ | استفاده از بسته NSubstitute NuGet برای تست های واحد سی شارپ

NSubstitute یک کتابخانه قوی تمسخر آمیز برای تست های واحد سی شارپ است که به توسعه دهندگان این امکان را می دهد تا به راحتی اشیاء جایگزین (mocks) برای وابستگی ها ایجاد کنند. این جایگزین‌ها را می‌توان به گونه‌ای پیکربندی کرد که به روش‌های خاصی رفتار کنند، و آنها را برای جداسازی واحد تحت آزمایش و تأیید تعامل آن با وابستگی‌ها ایده‌آل می‌سازد. در این راهنما، نحوه استفاده از NSubstitute را در تست‌های واحد C# با مثال‌های دقیق بررسی خواهیم کرد.

نصب و راه اندازی

قبل از اینکه بتوانید استفاده از NSubstitute را شروع کنید، باید بسته NSubstitute NuGet را در پروژه C# خود نصب کنید. می توانید این کار را از طریق کنسول NuGet Package Manager یا از طریق Visual Studio UI انجام دهید:

Install-Package NSubstitute
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین، می‌توانید «NSubstitute» را در رابط کاربری NuGet Package Manager جستجو کنید و آن را از آنجا نصب کنید.

استفاده پایه

بیایید با یک مثال اساسی از استفاده از NSubstitute برای تمسخر یک رابط شروع کنیم. فرض کنید رابط زیر را داریم که یک مخزن داده را نشان می دهد:

public interface IDataRepository
{
    string GetData();
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حال، بیایید یک آزمون واحد برای یک کلاس ایجاد کنیم (DataProcessor) که به این رابط بستگی دارد. ما از NSubstitute برای تمسخر استفاده خواهیم کرد IDataRepository رابط:

using NSubstitute;
using Xunit;

public class DataProcessorTests
{
    [Fact]
    public void ProcessData_WhenDataIsAvailable_ReturnsProcessedData()
    {
        // Arrange
        var mockRepository = Substitute.ForIDataRepository>();
        mockRepository.GetData().Returns("Mocked Data");
        var dataProcessor = new DataProcessor(mockRepository);

        // Act
        var result = dataProcessor.ProcessData();

        // Assert
        Assert.Equal("Processed Mocked Data", result);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

  • ما یک جایگزین برای IDataRepository رابط با استفاده از Substitute.For().
  • ما رفتار جایگزین را با استفاده از دستور پیکربندی می کنیم Returns روش برای برگرداندن “داده های مسخره شده” زمانی که GetData روش نامیده می شود.
  • سپس یک نمونه از DataProcessor، ارسال مخزن ساختگی به عنوان یک وابستگی.
  • در نهایت، روش تحت آزمایش را فراخوانی می کنیم (ProcessData) و رفتار آن را تأیید کنید.

استفاده پیشرفته

NSubstitute ویژگی‌های پیشرفته مختلفی مانند تطبیق آرگومان، پیکربندی مقادیر بازگشتی بر اساس آرگومان‌ها و تأیید فراخوانی‌های متد را فراهم می‌کند. بیایید به چند نمونه نگاه کنیم:

تطبیق استدلال

شما می توانید از تطبیق آرگومان برای تعیین رفتارهای مختلف بر اساس آرگومان های متد استفاده کنید. مثلا:

mockRepository.GetData(Arg.Anyint>()).Returns("Mocked Data");
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این پیکربندی بدون توجه به آرگومان عدد صحیح ارسال شده به “داده های مسخره شده” را برمی گرداند GetData.

تأیید فراخوانی روش

می توانید تأیید کنید که متدهای خاصی در جایگزین فراخوانی شده اند و به صورت اختیاری تعداد دفعات فراخوانی آنها را مشخص کنید. مثلا:

mockRepository.Received().GetData();
mockRepository.Received(3).GetData(); // Verifies that GetData was called exactly 3 times.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی Callbacks

می‌توانید جایگزین‌ها را برای انجام اقدامات سفارشی هنگام فراخوانی متدها پیکربندی کنید. مثلا:

mockRepository.GetData().Returns(x => "Mocked Data");
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این پیکربندی از یک عبارت لامبدا برای برگرداندن «داده های مسخره شده» بر اساس آرگومان های ارسال شده به آن استفاده می کند GetData.

بعدش چی؟

NSubstitute یک کتابخانه قوی تمسخر آمیز است که تست واحد در سی شارپ را ساده می کند. با اجازه به توسعه‌دهندگان برای ایجاد جایگزین‌هایی برای وابستگی‌ها با رفتارهای خاص، NSubstitute جداسازی مؤثرتر واحدهای تحت آزمایش و تأیید تعاملات آنها را ممکن می‌سازد. با نحو بصری و ویژگی های پیشرفته، NSubstitute یک ابزار ارزشمند برای نوشتن تست های واحد قوی و قابل نگهداری در C# است.

برای اطلاعات بیشتر در مورد NSubstitute، به اسناد رسمی مراجعه کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا