会社でKotlin dojo(第41回)を開催した

今週は第41回を開催しました。引き続きKotlin Hands-on編です!

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第41回の様子]

2020/11/25に第41回を開催した。

 

参加メンバーは自分をいれて4名。いつもの3名に加えて、久々に参加してくれたメンバーが1名。久々なのに、色々と積極的に発言してくれてよかった。

 

勉強会本編の内容としては、前回からはじめたKotlin Hands-on

Creating HTTP APIs with Ktorを最後まで進めて第6章のAutomated testingを完了した。第7章は発展的な内容が方針だけ示されていたので、いったんパス。これで無事一つ目のハンズオンが終わった🎉

 

[学んだことや疑問点]

  • Creating HTTP APIs with Ktor: 6. Automated testing
    • 自動テストを追加しよう、ということでOrderTests.ktの内容が以下の通り示された。
class OrderRouteTests {
    @Test
    fun testGetOrder() {
        withTestApplication({ module(testing = true) }) {
            handleRequest(HttpMethod.Get, "/order/2020-04-06-01").apply {
                assertEquals(
                    """{"number":"2020-04-06-01","contents":[{"item":"Ham Sandwich","amount":2,"price":5.5},{"item":"Water","amount":1,"price":1.5},{"item":"Beer","amount":3,"price":2.3},{"item":"Cheesecake","amount":1,"price":3.75}]}""",
                    response.content
                )
                assertEquals(HttpStatusCode.OK, response.status())
            }
        }
    }
}
    • 例によってimport文がないので、IntelliJのサジェストにしたがって粛々とimportしていく。
    • withTestApplication関数を使うとテスト用にアプリケーションを起動できるらしい。
    • アサート用のJSON文字列の部分は"""で囲まれたraw stringsになっていた。これは第22回の勉強会(Koansの第1回)で出てきた内容。
    • testing = trueという部分がコンパイルエラーになるので、Application.ktで定義しているmodule()関数にパラメータを追加しろ、と説明が出てくる。しかし、module()関数内でこの新規追加したパラメータを利用した分岐を追加しろ、といった指示は出てこない。
    • これは何の意味があるパラメータなのか、と参加者であれこれ議論し、ktor-server-testsライブラリの機能で何か意味があるパラメータなのではという説も出た。しかし、パラメータを削除してコンパイルが通る状態にすると普通にテストがパスするので、このハンズオンとしては何の意味もないパラメータなのでは、ということに。
    • 一応、テスト用のモック実装をアプリケーションに組み込んだりするためのフラグとして使えなくもなさそうだったが、本番用のコードにテスト用のコードが混ざるのは微妙なので、そういう目的ではないのかもしれない……。謎。
    • 公式のガイドをみても特にこのパラメータへの言及はないので、ハンズオン作者の趣味だろうか。

 

[まとめ]

モブプログラミング・スタイルで、Kotlin Hands-onを継続している。

これまで実装したHTTP APIに自動テストを追加することができた。Kotlin初テストコード。やったー!

来週はまた何か別のハンズオンに取り組む予定。

 

今週の進捗は以下のプルリクエストにまとまっている。

github.com