scala - ScalaCheck 之前/之后/前后?

标签 scala specs2 scalacheck

specs2 具有 BeforeAfterAround 等特征,以便能够在安装/拆卸代码中包装示例.

是否有任何东西可以支持为 ScalaCheck 属性的每次“迭代”(即 ScalaCheck 测试的每个值或值集)设置和拆除测试基础设施?

看起来specs2的各种Before、After、Around特征是围绕返回或抛出specs2结果实例而设计的,而Prop不是结果。

最佳答案

此问题现已在最新的 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 }
    }
  }
}

关于scala - ScalaCheck 之前/之后/前后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461035/

相关文章:

scala - Scala 中多个正则表达式的模式匹配

scala - 如何减少 ScalaCheck 生成的测试用例的数量?

java - 为什么 gradle 命令行不显示 specs2 结果?

scala - Specs2:如何测试具有多个注入(inject)依赖项的类?

eclipse - 将 scalacheck 与 Propspec 和 PropertyCheck 一起使用时,如何让 ScalaTest 正确报告测试结果?

scala - Haskell 的 mapM 相当于 Scala 猫

scala - 卡在 docker ubuntu 中的命令 "sbt compile"

scala - 无法在 PhantomJSEnv 上运行 scala.js,requiresDOM 设置强制为 false

scala - 在 Spec2 中的每个测试之前执行重置方法

scala - 如何使用specs2检查Future[Seq[T]]是否为空