给定一个序列Seq[Matcher[A]]
,我想获得一个Matcher[A]
在序列内的所有匹配器都成功时成功的单个序列。
编辑
我自己提供的答案似乎有点笨拙,此外,如果该序列的所有失败匹配器都产生结果,那就太好了
好的,我找到了一种方法:
(matchers: Seq[Matcher[A]]).reduce(_ and _)
不知何故,我认为必须有一种不同的方式,比如写作_.sequence
。
从匹配器序列创建新匹配器的问题在于,很难找到哪个匹配器失败了。
我认为更好的选择是分别匹配每个匹配器,如下所示:
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)
}
您可以从输出中看到匹配器是单独调用的,第一次失败会导致测试失败,并显示该匹配器的消息。
根据您的情况,为每个匹配器生成期望可能会更好,因此它将执行所有匹配器并向您显示正确的概述,而不仅仅是第一次失败。我没有走那么远(还)。