规格2:如何将Seq [Matcher [A]]转换为单个匹配器[A]?

时间:2011-10-27 14:06:48

标签: scala specs specs2

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

修改

我自己提供的答案看起来有点笨拙,而且如果序列中所有失败的匹配器都产生了结果,那将是很好的

2 个答案:

答案 0 :(得分:1)

好的,我找到了办法:

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

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

答案 1 :(得分: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)
}

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

根据具体情况,为每个匹配器生成Expectations甚至可能更好,因此它将全部执行它们并向您显示正确的概述,而不仅仅是第一次失败。我还没走那么远(还)。