【问题标题】:How to skip an implementation with specs2如何使用 specs2 跳过实现
【发布时间】:2016-12-16 21:59:21
【问题描述】:

在 specs2 中,给出了应该满足给定测试套件的实现列表。如何跳过当前环境中不可用的实现,但仍显示一条消息,通知用户已跳过该给定实现的测试?

我试过这个,但是当实现不可用时没有显示消息

case class ImplToTest(name: String, impl: Option[Impl])

val toTest: List[ImplToTest] = ...
val testSuite: Impl => Fragment = ...

toTest.foreach { underTest =>
  s"${underTest.name}" >> underTest.map(testSuite).getOrElse(org.specs2.specification.create.DefaultFragmentFactory.text("This implementation is being skipped"))
}

【问题讨论】:

    标签: scala specs2


    【解决方案1】:

    这样的东西对你有用吗?

    class TestSpec extends org.specs2.mutable.Specification {
    
      val implementations = List("now", "never", "always")
    
      implementations.foreach { implementation =>
        if (implementation == "never")
          s"$implementation" >> skipped("NOT NOW")
        else
          s"$implementation" >> {
            "do this" >> ok
            "do that" >> ok
          }
        br
    
      }
    }
    

    【讨论】:

    • 是的,它有效,谢谢。尽管实现不那么漂亮而且副作用更大。这是我所做的更改:github.com/jedesah/Quasar/commit/…。有没有办法在不设置函数Unit的返回类型的情况下完成同样的事情?
    • 如果将fss.toList.foreach 替换为Fragments.foreach(fss),难道你不会返回Fragments 而不是Unit
    • 如果我这样做,类型似乎不会排列。也许我对 Fragments API 的不熟悉是错误的。我知道只是进行上述开关会触发编译错误,预期 Fragments,但在第 69 行找到 org.specs2.execute.Skipped
    • 没错,我觉得你需要把if/else的第一部分包起来:Fragments(s"$implementation" >> skipped("NOT NOW"))
    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2021-11-16
    • 2022-12-18
    相关资源
    最近更新 更多