gotest

go get github.com/tracera-dev/tracera-go/gotest

يتطلب Go ≥ 1.25 (انظر محوّلات الاختبار الآلي). gotest على pkg.go.dev.

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

فعّل الإبلاغ مرة واحدة من TestMain:

package checkout_test

import (
    "os"
    "testing"

    "github.com/tracera-dev/tracera-go/gotest"
)

func TestMain(m *testing.M) {
    os.Exit(gotest.Run(m))
}

ربط testCaseId وautotestName

استخدم testing القياسي والربط الأمري:

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 42)
    // gotest.TestCase(t, 42, "e2e/checkout")
}

في الاختبارات المتوازية، استدعِ t.Parallel() قبل gotest.TestCase.

Skip

استخدم gotest.Skip / gotest.Skipf ليُضاف السبب إلى النتيجة كـ comment (الـ t.Skip وحده لا يفعل ذلك):

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 42)
    gotest.Skip(t, "needs a seeded account")
}

الخطوات

استخدم tracera.Step("…", func() { … }). لا توجد في Go مزخرفات (decorators) لخطوات الدوال. الخطوات داخل tracera.Setup / tracera.Teardown تذهب إلى الإعداد / التنظيف في النتيجة؛ أما بقية الخطوات فتذهب إلى الاختبار.

panic داخل tracera.Step يضيف رسالة الخطأ إلى بطاقة النتيجة. إذا فشل الاختبار عبر t.Fatal / t.Error، تبقى النتيجة Failed، لكن نص الفشل يبقى في مخرجات go test فقط.

import "github.com/tracera-dev/tracera-go"

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 10)

    tracera.Setup("open shop", func() {})
    tracera.Step("add item", func() {
        tracera.Step("nested leaf", func() {})
    })
    tracera.Teardown("close shop", func() {})
}

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

الحدود وأنواع MIME المسموحة: محوّلات الاختبار الآلي.

تُضاف tracera.Comment وtracera.Error والمرفقات إلى الخطوة المفتوحة، أو إلى النتيجة إذا لم تكن هناك خطوة مفتوحة. tracera.AttachmentFile يأخذ مسار ملف؛ وtracera.AttachmentBytes يأخذ اسمًا وبايتات ونوع MIME. تُرفَع المرفقات عند إرسال النتيجة.

import tracera "github.com/tracera-dev/tracera-go"

tracera.Comment("result-level note")
tracera.Error("result-level error")
tracera.AttachmentFile("testdata/screenshot.png")
tracera.Step("open login", func() {
    tracera.Comment("step note")
    tracera.AttachmentBytes("body.json", []byte(`{"ok":true}`), "application/json")
})

إذا شغّلت goroutine واستدعيت فيها واجهات Tracera (الخطوات والتعليقات والأخطاء والمرفقات)، احفظ السياق أولًا على goroutine الاختبار ثم شغّل العامل بـ tracera.RunWithContext — وإلا لن تُدرَج هذه الاستدعاءات في التقرير:

ctx := tracera.GetContext()
go tracera.RunWithContext(ctx, func() {
    tracera.Step("worker", func() { /* ... */ })
})

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

استخدم صفوف t.Run. إذا أردت اسمًا ثابتًا لكل صف، مرّره في TestCase:

func TestMatrix(t *testing.T) {
    for _, row := range []struct{ login string }{{"alice"}, {"bob"}} {
        t.Run(row.login, func(t *testing.T) {
            gotest.TestCase(t, 7, "login as "+row.login)
        })
    }
}