Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 规格2:如何将序列[Matcher[a]]转换为单个匹配器[a]?_Scala_Specs_Specs2 - Fatal编程技术网

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,只要你使用提供的匹配器,它就工作得很好。但不知何故,我无法通过重用现有的匹配器来构建新的匹配器。要么我不够聪明,要么效果不好。我想知道。对不起,我帮不了你,我也没造过