REST APIのテストコードを効率良く記述するためのライブラリであるrest-assuredをKotlinから利用してみた。
ライブラリを依存関係に設定する
Kotlin用のExtensionライブラリが提供されているため、これを依存関係に設定するだけでrest-assured本体は推移的に解決される。
build.gradle.kts
dependencies {
testImplementation("io.rest-assured:kotlin-extensions:4.5.1")
}
テストコードを実装する
先述のExtensionライブラリは、trainling lambdaやinfix notation、scope functionを活用してすっきりとした記述を可能にしている。条件・アサーション等をブロックで区切ることができ、各ブロック内のメソッド呼び出しをメソッドチェーンとして繋いで記述する必要がない。
val id: String = Given {
baseUri("https://...")
body(mapOf("key1" to "value1", "key2" to "value2"))
} When {
post("/api")
} Then {
statusCode(HttpStatus.SC_OK)
body("key1", equalTo("value1"))
} Extract {
path("id")
}
補足
上記のコード中に登場するメソッドについて、Given
はpublic fun Given(block: ...): ...
というシグネチャとなっており、上記ではblockをtrailing lambdaとして記述している。またWhen
, Then
, Extract
にはinfix修飾子が設定されているため、前のメソッドにドットなしで繋げて記述ができる。各ブロックはscope function (apply) に渡されるようになっているため、メソッドチェーンでの記述が不要となっている。
その他
テストコードを動かしながら実装するときに、Kotlinのビルドに少し時間がかかるのは辛いところ。
テストプロジェクトの例としてexample-test-restassuredリポジトリを作っている。