specs2具有諸如Before
,After
,Around
等特徵,以便能夠在安裝/拆卸代碼中包裝示例。ScalaCheck之前/之後/周圍?
有沒有什麼可以支持爲ScalaCheck屬性的每個「迭代」設置和拆除測試基礎設施,即ScalaCheck要測試的每個值或一組值?
它看起來像specs2的各種各樣的前,後,圍繞特質設計圍繞返回或拋出specs2結果實例,並不是一個結果。
specs2具有諸如Before
,After
,Around
等特徵,以便能夠在安裝/拆卸代碼中包裝示例。ScalaCheck之前/之後/周圍?
有沒有什麼可以支持爲ScalaCheck屬性的每個「迭代」設置和拆除測試基礎設施,即ScalaCheck要測試的每個值或一組值?
它看起來像specs2的各種各樣的前,後,圍繞特質設計圍繞返回或拋出specs2結果實例,並不是一個結果。
現在修復爲最新的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
到你的道具經過:
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 }
}
}
}
謝謝!但是你提供的第一個代碼示例不能用sonatype的最新快照編譯。我嘗試使用'sbt'從git編譯specs2,但是得到了'[error] {file:/ home/robin/git/specs2/project /} plugins/*:update:sbt.ResolveException:unresolved dependency:com.jsuereth#xsbt -gpg-plugin; 0.6:找不到 [error]未解決的依賴關係:me.lessis#ls-sbt; 0.1.2:not found# –
順便說一句,我現在使用的是Scala 2.9.1。 –
這種插件問題的確是由於Scala版本不匹配造成的。你可以擺脫構建文件中的插件。無論如何,我剛剛爲Scala 2.9.1發佈了1.12.2-SNAPSHOT,這樣你就不需要編譯自己了。 – Eric
的問題是,雖然有從'Prop'到'Result'的隱式轉換,沒有人會以另一種方式迴歸。 –