Theory & InlineData Attributes

آبجکت (Object)
Elementor #991

در زبان برنامه‌نویسی C# و به‌ویژه در استفاده از ابزارهای تست مانند xUnit، می‌توان از ویژگی‌هایی مانند `Theory` و `InlineData` برای نوشتن و اجرای تست‌ها استفاده کرد.

### `Theory`:
`Theory` یک نوع از تست در xUnit است که برای اجرای تست بر روی یک مجموعه‌ی ورودی مشخص شده استفاده می‌شود. در واقع، `Theory` یک تست که با ورودی‌های مختلف می‌تواند چندین بار اجرا شود.

### `InlineData`:
`InlineData` به `Theory` ارائه می‌دهد که چگونه مجموعه‌ای از ورودی‌ها را به تست می‌دهیم. با استفاده از `InlineData`، می‌توانیم مقادیر مختلفی را برای ورودی‌های یک `Theory` تعیین کنیم و هر بار تست با یکی از این مقادیر اجرا شود.

#### نمونه کد:
فرض کنید یک متد ساده و دو عدد را با هم جمع کند. می‌توانیم از `Theory` و `InlineData` برای ایجاد تست برای این متد استفاده کنیم.

				
					using Xunit;

public class MathTests
{
    [Theory]
    [InlineData(3, 5, 8)]   // First input: 3, Second input: 5, Expected result: 8
    [InlineData(0, 0, 0)]    // First input: 0, Second input: 0, Expected result: 0
    [InlineData(-3, 2, -1)]  // First input: -3, Second input: 2, Expected result: -1
    public void Add_ReturnsSum(int a, int b, int expected)
    {
        // Arrange
        var math = new Math();

        // Act
        var result = math.Add(a, b);

        // Assert
        Assert.Equal(expected, result);
    }
}

public class Math
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}
				
			


در این مثال، متد `Add_ReturnsSum` با استفاده از `Theory` تعریف شده است و با استفاده از `InlineData`، مجموعه‌ی ورودی‌ها و مقادیر مورد انتظار تست‌ها تعیین شده است. هر بار که تست اجرا می‌شود، `Theory` با یک مجموعه ورودی مختلف اجرا می‌شود و از طریق `InlineData` مقادیر به متد داده می‌شود.