鉴于代码如下:
class RESTAcceptanceTest extends Specification {
override def is = anonymous ^ signinOAuth
def anonymous = "Something" ^ givenSomething ^
"must happen" ^ mustHappen
end
def signinOAuth = "Signin" ^ givenSignin ^
"works as expected" ^ userExistsInDatabase
end
// rest of object definitions
}
Run Code Online (Sandbox Code Playgroud)
如何确保在"anonymous" 和 "signinOAuth" 之前/之后执行相同的代码之前和之后,即使测试失败,"after"方法也应该执行?
如果您使用给定/何时/然后步骤,您可以使用上下文来控制每个示例之前和之后执行的内容:
import org.specs2._
import specification._
class MySpec extends Specification { def is =
"anonymous" ^
"something" ^ something ^
"must happen" ^ mustHappen ^ endp^
"OAuth"^
"signing" ^ signing ^
"works ok" ^ worksOk
lazy val something: Given[Int] = (s: String) => { s.pp; 1 }
lazy val mustHappen: Then[Int] = (i: Int) => (s: String) =>
context { s.pp; i must_== 1 }
lazy val signing: Given[Int] = (s: String) => { s.pp; 2 }
lazy val worksOk: Then[Int] = (i: Int) => (s: String) =>
context { s.pp; i must_== 2 }
lazy val context = new BeforeAfter {
def before = "before".pp
def after = "after".pp
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,对象apply的方法context用于包装要使用before和执行的代码after。此外,如果您向其中一个示例添加错误,您将看到“之后”代码始终被执行。
PS:pp是一个实用方法,例如println在执行过程中在终端中显示某些内容。相对于 println 的优点是它返回其参数,因此您可以编写1.pp must_== 1
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |