1
Help us understand the problem. What are the problem?

posted at

Kotlinでrest-assuredを使う

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")
}

補足

上記のコード中に登場するメソッドについて、Givenpublic fun Given(block: ...): ...というシグネチャとなっており、上記ではblockをtrailing lambdaとして記述している。またWhen, Then, Extractにはinfix修飾子が設定されているため、前のメソッドにドットなしで繋げて記述ができる。各ブロックはscope function (apply) に渡されるようになっているため、メソッドチェーンでの記述が不要となっている。

その他

テストコードを動かしながら実装するときに、Kotlinのビルドに少し時間がかかるのは辛いところ。

テストプロジェクトの例としてexample-test-restassuredリポジトリを作っている。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?