Scala 规格2:如何将序列[Matcher[a]]转换为单个匹配器[a]?
给定一个序列Scala 规格2:如何将序列[Matcher[a]]转换为单个匹配器[a]?,scala,specs,specs2,Scala,Specs,Specs2,给定一个序列Seq[Matcher[a]]我想获得一个Matcher[a],当序列中的所有匹配器都成功时,该序列就会成功 编辑 我自己提供的答案似乎有点笨拙,此外,如果序列中所有失败的匹配者都能产生一个结果,那就太好了好的,我找到了一种方法: (matchers: Seq[Matcher[A]]).reduce(_ and _) 不知何故,我认为必须有一种不同的方法,比如编写.sequence从匹配器序列创建新匹配器的问题是,很难找到失败的匹配器 在我看来,更好的选择是分别与每个匹配者匹配,如
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)
}
您可以从输出中看到,分别调用了匹配器,第一个失败会导致测试失败,并显示该匹配器的消息
根据您的情况,为每个匹配器生成期望值可能更好,因此它将执行所有匹配器并向您显示正确的概述,而不仅仅是第一次失败。我(还)没走那么远 该死!3分钟,我觉得我的大脑快爆炸了。我只是看不到使用这个库的红线。那就不要使用它,scala可以很好地使用
JUnit
tooth,只要你使用提供的匹配器,它就工作得很好。但不知何故,我无法通过重用现有的匹配器来构建新的匹配器。要么我不够聪明,要么效果不好。我想知道。对不起,我帮不了你,我也没造过