前提
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.*
- 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())
}
}
ファイル名でクラスを定義。
@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
しかしこのまま実行してもうまくいかなかった。
class ApplicationTest {
@Test
fun testRoot() = testApplication {
application {
configureRouting()
}
// ......
Routing が結び付けられていなかったので
このように application の configure を結べつけた。
これで無事、最初のテストが通った。
まとめ
Ktor でテストを書くためには
http, server, client の ktor ライブラリを import して
application の configureRouting を結びつけて
/ から response を取って
StatusCode と response の status
response の body のテキスト
これらをチェックするコードを書く。
Top comments (0)