LoginSignup
5
3

More than 5 years have passed since last update.

Spekの2系を使ってみる

Posted at

概要

KotlinのテスティングフレームワークのSpekを試してみたメモ

Kotlin Fest 2018 のセッションの How to Test Server-side Kotlin で、2系を待って使ったほうが良いとあったので、現時点でalphaの2系で試してみる

セットアップ

spek公式の setup-jvm のページ通りにgraldeを設定する

注意点

  • intelliJプラグインのセットアップも忘れずに
  • Migrating to 2.x のサンプルコード のアサーションは org.jetbrains.kotlin:kotlin-test'を使っていると思われる
    • gradleの依存に testImplementation 'org.jetbrains.kotlin:kotlin-test'を追加する

テストの書き方

下記のような三角形クラスのverifyメソッドのテストコード

三角形クラス
class Triangle(private val x: Int, private val y: Int, private val z: Int) {

    enum class Type {
        // 正三角形
        EQUILATERAL,
        // 二等辺三角形
        ISOSCELES,
        // 通常三角形(不等辺三角形)
        NORMAL
    }

    fun verify() = when {
        (x == y && y == z && z == x) -> Type.EQUILATERAL
        (x == y || y == z || z == x) -> Type.ISOSCELES
        else -> Type.NORMAL
    }
}

describe - context - it

  • describe
    • 大項目
    • 直下に複数定義することができる
  • context
    • 中項目
    • 直下には書けない
    • describeの中に複数定義することができる
    • 省略可能
  • it
    • ここで assert をする
    • describeかcontextの中に複数定義することができる
object TriangleTest : Spek({
   describe("三角形の種類を判定") {
        context("3辺がすべて等しい") {
            it("verifyは正三角形を返す") {
                assertEquals(Triangle.Type.EQUILATERAL, Triangle(1, 1, 1).verify())
            }
        }
    }
})

Feature - Scenario - When - Given - Then

1系にあったgiven,on,itは使えなくなり、代わりにGherkinのような形式が使える

Gerkinについては、リファレンスを参照

    Feature("三角形の種類を判定") {

        lateinit var triangle: Triangle

        Scenario("正三角形判定") {
            Given("3辺がすべて等しい三角形") {
                triangle = Triangle(1, 1, 1)
            }

            lateinit var result: Triangle.Type

            When("verifyを実行") {
                result = triangle.verify()
            }
            Then("結果は正三角形") {
                assertEquals(Triangle.Type.EQUILATERAL, result)
            }
        }
    }

所感

どちらの形式でもテストコードを書いたことがなかったので、分類分けしやすそうなdescribe - context - itのほうが自分には使いやすそう

Feature - Scenario - When - Given - Then も、文字通り機能ごとのシナリオを考えてテストコードを書いていけば、仕様書のようなテストコードが書けそう。ただ、TDDみたいに開発しながら書くのには向いてなさそう。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3