xUnit

<PackageReference Include="Tracera.Xunit" Version="*" />

يتطلب .NET ≥ 8 وxUnit.net v3 (انظر محوّلات الاختبار الآلي). Tracera.Xunit على NuGet.

متغيرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.

سجّل المحوّل مرة واحدة لكل assembly اختبار:

[assembly: TraceraXunit]
[assembly: TestPipelineStartup(typeof(TraceraXunitStartup))]

ربط testCaseId وautotestName

استخدم واجهات xUnit القياسية كالمعتاد، والنوع العام Tracera.

عند التصريح (المفضّل — الربط يعمل حتى لو تخطّى الاختبار مبكرًا):

using Xunit;

public class LoginTests
{
    [Fact]
    [Tracera.Id(42, name: "e2e/login")]
    public void Login()
    {
        Assert.True(true);
    }
}

داخل الاختبار:

[Fact]
public void Login()
{
    Tracera.TestCase(42, "e2e/login");
    Assert.True(true);
}

Skip

استخدم تخطّي xUnit الافتراضي (Assert.Skip، [Fact(Skip = "…")]، …). يُضاف سبب التخطّي إلى النتيجة كـ comment.

الخطوات

استخدم Tracera.Step("…", () => { … }) أو Tracera.Step("…", async () => { … }) (يُنتظَر اكتمال الـ async lambda)، أو ضع [Tracera.Step("…")] على دالة (sync وasync Task). إذا كان عنوان [Tracera.Step] فارغًا أو محذوفًا، يصبح عنوان الخطوة اسم الدالة؛ تُملأ {0} / {name} في العنوان من وسائط الدالة. المُنشئ وIAsyncLifetime.InitializeAsync يذهبان إلى Setup؛ وIDisposable / IAsyncDisposable إلى Teardown؛ وجسم الاختبار إلى Test. إذا فشل IClassFixture / المُنشئ / InitializeAsync قبل جسم الاختبار، تُبلَّغ الاختبارات المرتبطة تصريحيًا كـ Failed (خطوات فارغة، وخطأ الـ fixture على النتيجة).

using Xunit;

public class CheckoutTests
{
    [Tracera.Step("add {sku}")]
    public void AddSku(string sku) { }

    [Fact]
    [Tracera.Id(10, name: "e2e/checkout")]
    public void Checkout()
    {
        AddSku("SKU-1");
        Tracera.Step("pay", () => { });
    }
}

التعليقات والأخطاء والمرفقات

التعليقات والأخطاء والمرفقات: محوّلات الاختبار الآلي.

Tracera.Comment("result-level note");
Tracera.Error("result-level error text");
Tracera.Step("open login", () =>
{
    Tracera.Comment("landed on login");
});

الاختبارات ذات المعاملات

ضع [Tracera.Id] على كل دالة [Theory] (نفس المعرّف لكل صف، أو استدعِ Tracera.TestCase داخلًا عندما يختلف المعرّف). يمكن أن يتضمن name الاختياري عناصر نائبة: {login} (وأسماء وسائط أخرى) من معاملات الدالة، أو {param_id} لاسم اختبار xUnit. إذا لم يُحدَّد name، فإن autotestName يأخذ قيمة اسم اختبار xUnit.

[Tracera.Id(42, name: "login as {login}")]
[Theory]
[InlineData("ok")]
[InlineData("sso")]
public void Login(string login)
{
    Assert.False(string.IsNullOrEmpty(login));
}