5

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

编辑

我自己提供的答案似乎有点笨拙,此外,如果该序列的所有失败匹配器都产生结果,那就太好了

4

2 回答 2

2

好的,我找到了一种方法:

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

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

于 2011-10-27T14:10:43.190 回答
2

从匹配器序列创建新匹配器的问题在于,很难找到哪个匹配器失败了。

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

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)
}

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

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

于 2013-02-15T12:48:15.497 回答