Kotest

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

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

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

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

سجّل الامتداد في إعدادات المشروع:

import dev.tracera.TraceraKotestExtension
import io.kotest.core.config.AbstractProjectConfig

class ProjectConfig : AbstractProjectConfig() {
    override fun extensions() = listOf(TraceraKotestExtension())
}

ربط testCaseId و autotestName

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

عند التصريح (المفضّل — على مستوى الـ Spec لـ FunSpec؛ وعلى مستوى الدالة لـ AnnotationSpec @Test):

import dev.tracera.Tracera
import io.kotest.core.spec.style.FunSpec

@Tracera.Id(42, name = "e2e/login")
class LoginSpec : FunSpec({
    test("login") {
        // …
    }
})

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

import dev.tracera.Tracera
import io.kotest.core.spec.style.FunSpec

class LoginSpec : FunSpec({
    test("login") {
        Tracera.testCase(42, "e2e/login")
    }
})

Skip

استخدم تخطّي Kotest القياسي (enabled = { … }، Assume.that، …). يُضاف سبب التخطّي إلى النتيجة كـ comment.

الخطوات

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

import dev.tracera.Tracera
import io.kotest.core.spec.style.AnnotationSpec

class CheckoutSpec : AnnotationSpec() {
    @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")
}

الاختبارات المُعلَّمة بمعاملات

في FunSpec أنشئ اختبارًا منفصلًا لكل صف بيانات: test("ok") { … } وtest("sso") { … }. ضع @Tracera.Id على صنف الـ Spec؛ يمكن لـ name الاختياري استخدام {param_id} فيُستبدل باسم هذا الاختبار ("ok" و"sso"). في AnnotationSpec دوال @Test بلا وسائط، لذا عناصر مثل {login} من المعاملات غير متاحة — {param_id} هو اسم دالة Kotlin؛ لتضمين حقول الصف في الاسم استدعِ Tracera.testCase داخل الاختبار. إذا لم يُحدَّد name، فإن autotestName يأخذ قيمة اسم اختبار Kotest.

import dev.tracera.Tracera
import io.kotest.core.spec.style.FunSpec

@Tracera.Id(42, name = "login as {param_id}")
class LoginSpec : FunSpec({
    for (login in listOf("ok", "sso")) {
        test(login) {
            assert(login.isNotEmpty())
        }
    }
})