Kotlin製の仕様記述フレームワークSpekの紹介


こっとり〜ん(挨拶)

これはKotlin Advent Calendar 2014の 12/15分です。
昨日はうらがみさんのKotlinでstaticメソッドが定義できるようになったのでJAX-RSリベンジ — 裏紙でした。

この記事ではKotlin製のJVM向け仕様記述フレームワークである(あってるかな…) Spekについて紹介します。

Spekとはオランダ語でベーコンである!!!以上。おわり。分厚いベーコン焼いて食べたい!

はい。

Spekを使うと、普段こんな感じでテストを書いていたテストコードに対し


@Test
public void testCalculateTaxRate() {

    TaxRateCalculator calculator = new TaxRateCalculator();

    Int value = calculator.calculateRate(200, 10);

    assertEquals(300,value);
}

こんな感じでテストに仕様を記述することができます。


class TaxCalculatorSpecs: Spek() {{

    given("Tax rate calculator with default locale settings") {
        val taxRateCalculator = TaxRateCalculator()
        on("calculating the rate for an income of 200 and an average change of 10 per semester") {
            val value = taxRateCalculator.calculateRate(200, 10)
            it("should result in a value of 300") {
                assertEquals(300, value)
            }
        }
    }
}}

テストを実行すると、以下のように階層的にテスト結果が表示されます。
どのような仕様なのかが分かりやすくて良いですね!
(実際に手元で動かそうと思ったけどうまく行かなかったのでリベンジせねば…後で追記修正します…)

Spekで記述出来る内容は以下の通りです。

  • given: 与えられる状況。セットアップなどを記述する。1回だけ出現。
  • on: 実行する処理を記述する。1回以上出現。
  • it: アクションの結果、アサーションを記述する。1回以上出現。

見ての通り、Spekはテスティングフレームワークでは無くて、JUnitなどのテストに仕様を記述する機能を提供するものみたいです。

SpekはJavaでも利用できるみたいなので試してみたいですね。

まだドキュメントが少なかったり、ライブラリのArtifact Versionが間違っていたりと整っていない感じもありますが、JetBrainsが専用のサイトを作っていて、それなりに力を入れていると思うので、今後もチェックしていきたいと思います。