CodeShot
xUnit1 دقیقه مطالعه

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.

این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←