Testing

note

Testing - 图1

This help topic is in development and will be updated in the future.

Ktor exposes a MockEngine for the HttpClient. This engine allows simulating HTTP calls without actually connecting to the endpoint. It allows to set a code block, that can handle the request and generates a response.

Usage

The usage is straightforward: the MockEngine class has a method addHandler in MockEngineConfig, that receives a block/callback that will handle the request. This callback receives an HttpRequest as a parameter, and must return a HttpResponseData. There are many helper methods to construct the response.

Full API description and list of helper methods could be found here.

A sample illustrating this:

1. val client = HttpClient(MockEngine) {
2. engine {
3. addHandler { request ->
4. when (request.url.fullUrl) {
5. "https://example.org/" -> {
6. val responseHeaders = headersOf("Content-Type" to listOf(ContentType.Text.Plain.toString()))
7. respond("Hello, world", headers = responseHeaders)
8. }
9. else -> error("Unhandled ${request.url.fullUrl}")
10. }
11. }
12. }
13. }

15. private val Url.hostWithPortIfRequired: String get() = if (port == protocol.defaultPort) host else hostWithPort
16. private val Url.fullUrl: String get() = "${protocol.name}://$hostWithPortIfRequired$fullPath"