سی شارپ | استفاده از بسته 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، به اسناد رسمی مراجعه کنید.