JUnit 5

dependencies {
    testImplementation("dev.tracera:tracera-junit5:<version>")
}

يتطلب JDK ≥ 17 وJUnit ≥ 5.8 (انظر محوّلات الاختبار الآلي). tracera-junit5 على Maven Central.

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

مفتاح Env عند إعادة المحاولة: JUNIT_RETRY.

فعّل التسجيل التلقائي للامتداد (مرة واحدة لكل مشروع):

# src/test/resources/junit-platform.properties
junit.jupiter.extensions.autodetection.enabled=true

أو سجّل صراحةً: @ExtendWith(TraceraExtension::class).

ربط testCaseId و autotestName

استورد واجهات JUnit Jupiter القياسية كالمعتاد، ومن dev.tracera — Tracera وId.

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

import dev.tracera.Tracera
import org.junit.jupiter.api.Test

class LoginTest {
    @Tracera.Id(42, name = "e2e/login")
    @Test
    fun login() {
        assert(true)
    }
}

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

import dev.tracera.Tracera
import org.junit.jupiter.api.Test

class LoginTest {
    @Test
    fun login() {
        Tracera.testCase(42, "e2e/login")
        assert(true)
    }
}

Skip

استخدم تخطّي JUnit القياسي (Assumptions.abort، @Disabled، …). يُضاف سبب التخطّي إلى النتيجة كـ comment.

الخطوات

استخدم Tracera.step("…") { … } أو Tracera.suspendStep("…") { … } للكوروتينات أو @Tracera.Step("…") على دالة (sync وsuspend). مع @Tracera.Step، إن كان العنوان فارغًا أو محذوفًا يصبح عنوان الخطوة اسم الدالة؛ {0} / {name} في العنوان تُملأ من وسائط الدالة. الخطوات داخل @BeforeEach / @AfterEach تذهب إلى الإعداد / التنظيف في النتيجة؛ الخطوات داخل الاختبار تذهب إلى الاختبار. @BeforeAll / @AfterAll لا تُبلَّغ.

import dev.tracera.Tracera
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

class CheckoutTest {
    @BeforeEach
    fun openShop() {
        Tracera.step("open shop") { }
    }

    @Tracera.Step("add {sku}")
    fun addSku(sku: String) {
    }

    @Tracera.Id(10, name = "e2e/checkout")
    @Test
    fun 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 على كل دالة @ParameterizedTest (نفس المعرف لكل صف، أو استدعِ Tracera.testCase داخل الدالة إن اختلف المعرف). يمكن لـ name الاختياري أن يتضمن عناصر نائبة: {login} وغيرها من أسماء وسائط الدالة، أو {param_id} لاسم اختبار JUnit. إذا لم يُحدَّد name، فإن autotestName يأخذ قيمة اسم اختبار JUnit.

@Tracera.Id(42, name = "login as {login}")
@ParameterizedTest
@ValueSource(strings = ["ok", "sso"])
fun login(login: String) {
    assert(login.isNotEmpty())
}