Specs2 のドキュメントとサンプルには、受け入れテストでの Give/Then/When スタイルの使用に関するコードがいくつか示されています。
ここにそれらの1つ:
"A given-when-then example for the addition" ^
"Given the following number: ${1}" ^ number1 ^
"And a second number: ${2}" ^ number2 ^
"And a third number: ${3}" ^ number3
val number1: Given[Int] = (_:String).toInt
val number2: When[Int, (Int, Int)] = (n1: Int) => (s: String) => (n1, s.toInt)
val number3: When[Seq[Int], Seq[Int]] = (numbers: Seq[Int]) => (s: String) => numbers :+ s.toInt
ただし、ここでは一部のプリミティブ オブジェクトのみを扱いInt
ます (サンプルなので通常)。
しかし、複雑なオブジェクトをどのように扱うのでしょうか? を使用していDatatables
ますか?
理想的なのは、「フィクスチャ」のファイル内で、複雑なオブジェクトを定義するデータテーブル (または同様のもの) を定義することです。
User
「Mik」を定義する外部データテーブル
"name" | "job" | "e-mail"
"mik" | "engineer" | "mik@mik.com"
次のような Given ステートメントを作成したいと思います。
"Given the following user: ${Mik}" ^ retrieve_user_from_database ^
val user: Given[User] = .....Some ideal codes here to map Mik's values to User model.
良いプラクティスとは何ですか? Specs2 は現在何を提供していますか?