03.BDD と ScalaTest の始め方

ビヘイビア駆動開発(BDD)スタイルでは、コードのふるまいをテキストで記述し、テストによってふるまいを実証します。

ScalaTest はこのスタイルを促進する3つのトレイト(Spec, WordSpec, FlatSpec)を有しています。

3つともBDDを促進するという目的は同じですが、仕様を記述する方法に若干の違いがあります。

注意: FeatureSpec トレイトでも同様にBDDを実現できますが、このトレイトはユニットテストよりもむしろ、機能テスト・結合テスト・受け入れテストに合致するものです。

Spec トレイトは、Ruby の RSpec の一部からインスパイアされています。

仕様に関するテキストは describe と it 節に入れ子で記述します。

以下に例を示します:

import org.scalatest.Spec

import org.scalatest.matchers.ShouldMatchers

import scala.collection.mutable.Stack

class StackSpec extends Spec with ShouldMatchers {

describe("スタックが") {

describe("(空のとき)") {

val stack = new Stack[Int]

it("空でなければならない") {

stack should be ('empty)

}

it("ポップされたら、不満を言わなければならない") {

evaluating { stack.pop() } should produce [NoSuchElementException]

}

}

}

}

Spec を使ってテストを書きたいのなら、

を参照してください。

WordSpec トレイトは、Eric Torreborre's の Specs の一部からインスパイアされています。

仕様に関するテキストを記述した後、特定の語句を後に続けます。

以下に例を示します:

import org.scalatest.WordSpec

import org.scalatest.matchers.ShouldMatchers

import scala.collection.mutable.Stack

class StackSpec extends WordSpec with ShouldMatchers {

"スタック" when {

"空" should {

val stack = new Stack[Int]

"空である" in {

stack should be ('empty)

}

"ポップされたら、不満を言う" in {

evaluating { stack.pop() } should produce [NoSuchElementException]

}

}

}

}

WordSpec を使ってテストを書きたいのなら、

を参照してください。

FlatSpec トレイトは入れ子記述を避けている点で、他のBDDトレイトと異なります。

FlatSpec の "Flat" は、仕様に関するテキストが入れ子にならず、左ぞろえでフラットに一列に並んでいることを意味します。

import org.scalatest.FlatSpec

import org.scalatest.matchers.ShouldMatchers

import scala.collection.mutable.Stack

class StackSpec extends FlatSpec with ShouldMatchers {

val stack = new Stack[Int]

"スタック(空)" should "空である" in {

stack should be ('empty)

}

it should "ポップされたら、不満を言う" in {

evaluating { stack.pop() } should produce [NoSuchElementException]

}

}

FlatSpec を使ってテストを書きたいのなら、

を参照してください。