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 を使ってテストを書きたいのなら、
を参照してください。