【问题标题】:Specs2: How to turn a Seq[Matcher[A]] into a single Matcher[A]?Specs2:如何将 Seq[Matcher[A]] 变成单个 Matcher[A]?
【发布时间】:2011-12-16 13:20:33
【问题描述】:

给定一个序列Seq[Matcher[A]],我想获得一个Matcher[A],它在序列内的所有匹配器都成功时成功。

编辑

我自己提供的答案似乎有点笨拙,另外如果序列的所有失败匹配器都产生结果会很好

【问题讨论】:

    标签: scala specs specs2


    【解决方案1】:

    从匹配器序列创建一个新的匹配器的问题是更难找到哪个匹配器失败了。

    在我看来,更好的选择是分别匹配每个匹配器,如下所示:

    val matchers: Seq[Matcher[Boolean]] = Seq(
      ((_: Boolean).equals(false), "was true 1"),
      ((_: Boolean).equals(true), "was false 2"),
      ((_: Boolean).equals(true), "was false 3")
    )
    
    "work with matcher sequence" in {
      matchers.foreach(beMatching => false must beMatching)
    }
    

    您可以从输出中看到匹配器是单独调用的,第一次失败会导致测试失败并显示消息该匹配器。

    根据您的情况,为每个匹配器生成预期可能会更好,因此它将执行所有匹配器并向您显示正确的概览,而不仅仅是第一次失败。我没有走那么远(还)。

    【讨论】:

      【解决方案2】:

      好的,我找到了方法:

      (matchers: Seq[Matcher[A]]).reduce(_ and _)
      

      不知何故,我认为必须有不同的方式,比如写_.sequence。

      【讨论】:

      • 该死! 3分钟,很快
      • 我觉得我的大脑快要爆炸了。就是在这个库的使用中看不到红线。
      • 那就别用了,scala 和JUnit 也很好玩
      • 问题是只要您使用提供的匹配器,它就可以很好地工作。但不知何故,我无法通过重用现有的匹配器来构建新的匹配器。要么我不够聪明,要么效果不好。我想知道。
      • 抱歉帮不了你,我也从来没建过
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2019-03-03
      • 2021-08-31
      • 2012-10-11
      相关资源
      最近更新 更多