【问题标题】:Outputting list elements as Examples in Scala Specs2 when using forAll使用 forAll 时在 Scala Specs2 中将列表元素作为示例输出
【发布时间】:2014-10-01 06:41:07
【问题描述】:

在这段代码 sn-p 中,SqlTypes.BinaryTypes(String, Int) 元组的列表。

"process binary types" >> {
  SqlTypes.BinaryTypes.foreach(sqlType => {
    val label = sqlType._1
    val value = sqlType._2

    s"$label" in new ABinaryColumnHandler {
      handler.canProcess(value) should beTrue
    }
  })

  "for all of them" in new ABinaryColumnHandler {
    handler should processTypes(SqlTypes.BinaryTypes)
  }
}

第一部分,foreach 所在的位置,为列表的每个元素创建一个新示例,并运行简单测试。第二部分调用自定义匹配器:

def processTypes(typeList: List[(String, Int)]): Matcher[ColumnHandler] = (handler: ColumnHandler) => {
    forall(typeList) { sqlType =>
      val value = sqlType._2
      handler.canProcess(value) should beTrue
    }
}

如果没有在其后定义另一个示例,第一部分将无法运行,因为该 foreach 的返回是 Unit 而不是 ExampleFragment。我尝试了第二种方式,因为它看起来更简单,但我无法按照我想要的方式构造它的输出,就像这样(在 IntelliJ 中,但在 SBT 中看起来相似):

我真正想要的是 Specs2 在两种情况下都输出相同,或者更像

process binary types
   for all of them
      BINARY
      VARBINARY
      LONGBINARY

如何调整后一个示例的运行方式以输出我想要的方式?

【问题讨论】:

    标签: scala intellij-idea specs2


    【解决方案1】:

    使用>> 并返回Unit 的块是不明确的。您想创建示例还是创建期望?

    // is it this?
    "several examples" >> {
      Seq(1, 2).foreach { i => s"example $i" >> { 1 must_== 1 } }
    }
    
    // or that?
    "several expectations" >> {
      Seq(1, 2).foreach { i => i must_== i }
    }
    

    为了解决歧义,您需要使用以下两种方法之一:

    • examplesBlock 创建示例
    • Result.unit 创造期望

    像这样:

    class TestSpec extends org.specs2.mutable.Specification {
    
      "process binary types" >> examplesBlock {
         List("BINARY", "VARBINARY").foreach { label =>
          s"$label" in new ABinaryColumnHandler {
            Result.unit(Seq(1, 2).foreach(i => i must_== i))
          }
        }
      }
    
      trait ABinaryColumnHandler extends Scope
    }
    

    User Guide 中有关于这两种方法的注释。

    【讨论】:

    • 感谢您的回答。我想创建示例。这与我正在寻找的非常接近。最终创建了一个具有示例块的函数,并将类型和匹配器传递给该函数。例如。 "process binary types" >> { eachTypeShould(SqlTypes.BinaryTypes, beTrue) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2014-10-20
    • 1970-01-01
    • 2018-02-11
    • 2018-10-08
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多