KotlinでUnitテストでassertionに何を使うか
KotlinでUnitテストを書く際に、assertionに何を使うかという話。
私の場合特にこだわりがあるわけではないのだが、基本的には多数派に従いたいという気持ちが強い。しかしながら、Kotlinのテストのassertionに使うならこれ一択、みたいなものがない(と思っている)ので、いつも困る。
Javaなら特に何もせずともhamcrestのassertThat(sut.getHoge()).is("fuga")
みたいなassertionを使っていればいいのだが、Kotlinの場合はis
が予約語であるという問題がある。いちいちis
をバッククォートでくくらなければならず美しくない。
日本ではいちばん有名なやつだと思われる(DroidKaigiのアプリでも使われていたはずなので)。
sut.getHoge().should be "fuga"
みたいな感じで使う。
ただrepositoryを追加しないと組み込めないので私はあまり使っていない。build.gradleに一行追加するだけの話なんだけどね・・・。
https://github.com/winterbe/expekt
knitに似たsut.getHoge().should.equals("fuga")
みたいな感じのAPI。リポジトリの追加が必要ないので、私はこっちをよく使っている。
ただメンテされてないのが玉に瑕。
https://github.com/kotlintest/kotlintest
assertionライブラリではなくて、Spec風のテストを書くためのライブラリ。
ただsut.getHoge() shouldBe "fuga"
みたいなassertionが含まれている。
SpekというSpec風のテストを書くためのライブラリがあるが、こちらはJava8でなければ使えないという制約があって、Androidのプロジェクトに適用するのはなんだか難しそうで手を出していない。
kotlintestはネストしたテストを書きやすくて、これいいかもとか思ったこともあったのだけれど、androidTestに組み込むとメソッドカウントがオーバーしてしまうので使えない。
https://github.com/willowtreeapps/assertk
Android Weeklyで流れてきて知った。AssertJチックなassertionライブラリで、Kotlinで使うならコレのが便利なのだろうか。
assert(sut.getHoge()).isEqualTo("fuga")
みたいな感じで使う。
しかし個々最近はshould
系ばかり使ってきているので、最初にassert
を書かないといけない形式はめんどくさいと感じてしまっている。
https://joel-costigliola.github.io/assertj/
Javaのコードも考慮に入れるならJavaで使えるライブラリを使うのがいいのだろう。
私はJavaだとhamcrest使っとけばいいやな人だったので、Javaでassersionライブラリを何使うかなんて特に気にしたことはなかった。
みんなはどれを使っているのだろうか。他にこれが使いやすいみたいなのがあったら教えて欲しい。
私はexpektを使う傾向が強いが、揺らいでいる。
正直なところassertionさえできればなんでもいいのだろうからして、自分が使いやすいものを使えばいいってだけの話なのだろうけれども。
https://discuss.kotlinlang.org/t/what-assertions-library-do-you-use/1809
ここをみると、kotlintestが多いっぽい。