Specs2 的文档和示例显示了一些关于在验收测试中使用 Given/Then/When 样式的代码。
这里是其中之一:
"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 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 目前提供了什么?