DEV Community

kaede
kaede

Posted on

Ktor で Application.kt の test を作成して実行する

前提

Ktor のプロジェクトを web で作成して、IntelliJ で起動して
Chrome で動作が確認できている。

App のテストをする

https://ktor.io/docs/testing.html#overview

プロジェクト生成後の testApplication の中身は空なので、
ktor 公式の docs の通りに実装する。

src/kotlin/com/exmaple/ApplicationTest.kt

ここに Application.kt のテストファイルを書く。

import io.ktor.http.*
import kotlin.test.*
import io.ktor.server.testing.*
import com.example.plugins.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
Enter fullscreen mode Exit fullscreen mode
  • kotlin の test
  • ktor の http
  • ktor の server の testing
  • ktor の client の request
  • ktor の client の statement

これらの必要なライブラリを import

class ApplicationTest {
    @Test
    fun testRoot() = testApplication {
        val response = client.get("/")
        assertEquals(HttpStatusCode.OK, response.status)
        assertEquals("Hello from Kotlin Ktor", response.bodyAsText())
    }
}
Enter fullscreen mode Exit fullscreen mode

ファイル名でクラスを定義。
@test と宣言
testApplication を使って testRoot という関数の中身に書く。
その後、client.get で Route ファイルと同じく / から取って
HttpStatusCode が OK... 200 ?と
response の中身が True なことをテストしていると推測
response の body が 期待されたテキストなのを確認

expected:<200 OK> but was:<404 Not Found>
Expected :200 OK
Actual   :404 Not Found
Enter fullscreen mode Exit fullscreen mode

しかしこのまま実行してもうまくいかなかった。

class ApplicationTest {
    @Test
    fun testRoot() = testApplication {
        application {
            configureRouting()
        }
// ......
Enter fullscreen mode Exit fullscreen mode

Routing が結び付けられていなかったので
このように application の configure を結べつけた。

Image description

これで無事、最初のテストが通った。

まとめ

Ktor でテストを書くためには
http, server, client の ktor ライブラリを import して

application の configureRouting を結びつけて
/ から response を取って
StatusCode と response の status
response の body のテキスト

これらをチェックするコードを書く。

Top comments (0)