Java 使用自定义启动器运行一批Junit5测试(无反射或自动注册)

Java 使用自定义启动器运行一批Junit5测试(无反射或自动注册),java,kotlin,junit5,Java,Kotlin,Junit5,在JUnit5中,如何以编程方式注册扩展,而不必每次测试都注册。我目前正在使用由system属性激活的java服务机制。但我希望在测试运行中定义一个参数,而不使用该机制,因为它使用Graal原生映像运行,并尽可能避免自动配置 import mockwebserver3.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.junit.

在JUnit5中,如何以编程方式注册扩展,而不必每次测试都注册。我目前正在使用由system属性激活的java服务机制。但我希望在测试运行中定义一个参数,而不使用该机制,因为它使用Graal原生映像运行,并尽可能避免自动配置

import mockwebserver3.MockWebServer
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
import org.junit.jupiter.engine.JupiterTestEngine
import org.junit.platform.console.options.Theme
import org.junit.platform.engine.TestEngine
import org.junit.platform.engine.discovery.DiscoverySelectors.selectClass
import org.junit.platform.launcher.Launcher
import org.junit.platform.launcher.LauncherDiscoveryRequest
import org.junit.platform.launcher.PostDiscoveryFilter
import org.junit.platform.launcher.TestExecutionListener
import org.junit.platform.launcher.core.LauncherConfig
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder
import org.junit.platform.launcher.core.LauncherFactory
import org.junit.platform.launcher.listeners.SummaryGeneratingListener
import java.io.PrintWriter
import kotlin.system.exitProcess

class MySampleTest {
  @Test
  fun failingTest(server: MockWebServer) {
    assertThat("hello").isEqualTo("goodbye")
  }
}

fun main() {
  System.setProperty("junit.jupiter.extensions.autodetection.enabled", "true")

  val summaryListener = SummaryGeneratingListener()

  val jupiterTestEngine = JupiterTestEngine()

  val config = LauncherConfig.builder()
    .enableTestExecutionListenerAutoRegistration(false)
    .enableTestEngineAutoRegistration(false)
    .enablePostDiscoveryFilterAutoRegistration(false)
    .addTestEngines(jupiterTestEngine)
    .addTestExecutionListeners(summaryListener, DotListener)
    .build()
  val launcher: Launcher = LauncherFactory.create(config)

  val request: LauncherDiscoveryRequest = LauncherDiscoveryRequestBuilder.request()
    // TODO replace junit.jupiter.extensions.autodetection.enabled with API approach.
//    .enableImplicitConfigurationParameters(false)
    .selectors(selectClass(MySampleTest::class.java))
    .build()

  val result = launcher.execute(request)

  val summary = summaryListener.summary
  summary.printTo(PrintWriter(System.out))

  exitProcess(if (summary.testsFailedCount != 0L) -1 else 0)
}