Test a Grails Application with Micronaut HTTP Client
To use a Micronaut HTTP Client to test the API exposed by your Grails application you can use the following parent class for your integration tests:
package example
import io.micronaut.http.client.BlockingHttpClient
import io.micronaut.http.client.HttpClient
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Stepwise
abstract class ClientSpec extends Specification {
    @Shared
    HttpClient _httpClient
    @Shared
    BlockingHttpClient _client
    HttpClient getHttpClient() {
        if (_httpClient == null) {
            _httpClient = createHttpClient()
        }
        _httpClient
    }
    BlockingHttpClient getClient() {
        if (_client == null) {
            _client = getHttpClient().toBlocking()
        }
        _client
    }
    HttpClient createHttpClient() {
        String baseUrl = "http://localhost:$serverPort"
        HttpClient.create(baseUrl.toURL())
    }
    def cleanupSpec() {
        resetHttpClient()
    }
    void resetHttpClient() {
        _httpClient?.close()
        _httpClient = null
        _client = null
    }
}
A example test in src/integrationTest/groovy:
@Integration
class ApiContactControllerSpec extends ClientSpec {
    void "/apiContact is not a valid path"() {
        when:
        client.exchange(HttpRequest.GET('/apiContact'))
        then:
        HttpClientResponseException e = thrown()
        e.status == HttpStatus.NOT_FOUND
    }
}
You will need the following dependencies in build.gradle:
...
dependencies {
    ...
    ..
    testImplementation "io.micronaut:micronaut-inject-groovy"
    testImplementation "io.micronaut:micronaut-http-client"
}
Tags: #grails #micronaut