How to test a gradle task that does not terminate with TestKit?

I am currently working on a PR that solves a small bug in the vertx-gradle-plugin. In order to test my PR, I’d like to test two of the gradle tasks (vertxRun and vertxDebug) using the TestKit. My first clunky draft looks like the following:

@Test(timeout = 20_000)
fun `check that the application does run with custom launcher`() {
  val `in` = PipedInputStream()
  val reader = BufferedReader(InputStreamReader(`in`))
  val out = PipedOutputStream(`in`)

  val runnerTask = Thread {
      .withArguments("clean", "vertxRun")
  reader.lineSequence().forEach { line ->
    if (line.startsWith("Starting vert.x application...")) {
      val response = Unirest.get("http://localhost:18080/").asString()

While this approach seems to work, I wonder if there is a cleaner solution to test a gradle task that is not terminating. I had a look at Spring’s BootRunIntegrationTest and their solution works without using a separate thread and the like, yet I did not figure out what they are doing differently.

I wonder if there is recommended approach to test these tasks?

I had a closer look at the the BootRunIntegrationTest I previously mentioned. Turns out, they do not start a fully-sophisticated spring boot application but create a class with a main method on the fly, that terminates after printing some information to the console.