2012-09-17 75 views
1

specs2具有諸如Before,After,Around等特徵,以便能夠在安裝/拆卸代碼中包裝示例。ScalaCheck之前/之後/周圍?

有沒有什麼可以支持爲ScalaCheck屬性的每個「迭代」設置和拆除測試基礎設施,即ScalaCheck要測試的每個值或一組值?

它看起來像specs2的各種各樣的前,後,圍繞特質設計圍繞返回或拋出specs2結果實例,並不是一個結果。

+0

的問題是,雖然有從'Prop'到'Result'的隱式轉換,沒有人會以另一種方式迴歸。 –

回答

2

現在修復爲最新的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 } 
    } 
    } 
} 
+0

謝謝!但是你提供的第一個代碼示例不能用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# –

+0

順便說一句,我現在使用的是Scala 2.9.1。 –

+1

這種插件問題的確是由於Scala版本不匹配造成的。你可以擺脫構建文件中的插件。無論如何,我剛剛爲Scala 2.9.1發佈了1.12.2-SNAPSHOT,這樣你就不需要編譯自己了。 – Eric