specs2 具有诸如Before
、After
、Around
等特征,以便能够将示例包装在设置/拆卸代码中。
是否有任何东西支持为ScalaCheck 属性的每个“迭代”设置和拆除测试基础设施,即ScalaCheck 要测试的每个值或一组值?
看起来 specs2 的各种 Before、After、Around 特征都是围绕返回或抛出 specs2 Result 实例而设计的,而 Prop 不是 Result。
specs2 具有诸如Before
、After
、Around
等特征,以便能够将示例包装在设置/拆卸代码中。
是否有任何东西支持为ScalaCheck 属性的每个“迭代”设置和拆除测试基础设施,即ScalaCheck 要测试的每个值或一组值?
看起来 specs2 的各种 Before、After、Around 特征都是围绕返回或抛出 specs2 Result 实例而设计的,而 Prop 不是 Result。
这已在最新的 1.12.2-SNAPSHOT 中得到修复。你现在可以写:
import org.specs2.ScalaCheck
import org.specs2.mutable.{Around, Specification}
import org.specs2.execute.Result
class TestSpec extends Specification with ScalaCheck {
"test" >> prop { i: Int =>
around(i must be_>(1))
}
val around = new Around {
def around[T <% Result](t: =>T) = {
("testing a new Int").pp
try { t }
finally { "done".pp }
}
}
}
这将在属性的“主体”之前和之后执行代码。
您还可以更进一步,创建一个支持方法以将隐式传递around
给您的 Props:
class TestSpec extends Specification with ScalaCheck {
"test" >> propAround { i: Int =>
i must be_>(1)
}
// use any implicit "Around" value in scope
def propAround[T, R](f: T => R)
(implicit a: Around,
arb: Arbitrary[T], shrink: Shrink[T],
res: R => Result): Result =
prop((t: T) => a(f(t)))
implicit val around = new Around {
def around[T <% Result](t: =>T) = {
("testing a new Int").pp
try { t }
finally { "done".pp }
}
}
}