xUnit چیست؟
محبوبترین فریمورک تست واحد در داتنت مدرن، با نحو ساده و پشتیبانی پیشفرض در قالبهای dotnet new.
چرا مهم است؟
xUnit قالب پیشفرض تست در .NET SDK و اکوسیستم ASP.NET Core است و اکثر پروژههای متنباز داتنت (از جمله خود ASP.NET Core) با آن تست میشوند.
تعریف
xUnit.net فریمورکی متنباز برای تست واحد در داتنت است که بهجای [TestClass]/[TestMethod] از [Fact] و [Theory] استفاده میکند و برای هر تست یک نمونه جدید از کلاس تست میسازد (ایزولهسازی بهتر).
Fact در برابر Theory
public class CalculatorTests
{
[Fact] // یک سناریوی مشخص، بدون پارامتر
public void Add_ReturnsSum()
=> Assert.Equal(5, new Calculator().Add(2, 3));
[Theory] // چند سناریو با ورودیهای مختلف
[InlineData(2, 3, 5)]
[InlineData(-1, 1, 0)]
public void Add_HandlesMultipleCases(int a, int b, int expected)
=> Assert.Equal(expected, new Calculator().Add(a, b));
}
نکات مهم
- برای Setup/Teardown مشترک بین تستها از سازنده (Constructor) و
IDisposableاستفاده کنید، نه Attribute جداگانه. - اشتراک وضعیت سنگین (مثل اتصال دیتابیس) بین چند تست با
IClassFixture<T>انجام میشود.
اشتباه رایج
❌ نگهداشتن فیلد static بین تستها به امید اشتراک وضعیت — چون xUnit هر تست را روی نمونه جدید کلاس اجرا میکند و ترتیب اجرا تضمینشده نیست، این کار تستها را ناپایدار میکند.
منبع و مطالعه بیشتر
خلاصه
xUnit فریمورک پیشفرض تست در داتنت مدرن است و بین [Fact] (یک سناریو) و [Theory] (چند ورودی) تفاوت میگذارد. برای اشتراک وضعیت بین تستها از IClassFixture استفاده کنید، نه فیلد static. مرجع کامل: مستندات رسمی xUnit.net.
