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

Импортируйте стандартные API JUnit Jupiter как обычно, а из dev.tracera — Tracera и Id.

В объявлении (предпочтительно — привязка сработает, даже если тест сразу уйдёт в skip):

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, …). Skip reason добавляется в результат как 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 (один id на все строки, или вызывайте Tracera.testCase внутри, если id разный). В необязательном 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())
}