在specs2匹配器中结合forall和^^^

时间:2012-09-19 09:58:32

标签: scala specs2

在Specs2中,forallforeach方法可用于将单个项目的匹配器转换为原始类型的项目序列上的匹配器,并且可以使用^^^在匹配之前预处理实际的期望值。但是我如何将两者合并?

我试过

((s must myMatcher(x)) ^^^ (_.toLowerCase)).forall(collection)

但这不会编译。

1 个答案:

答案 0 :(得分:2)

问题实际上与forall无关。将forall移到前面以提高可读性(这是不必要的)之后,可以通过重写代码使代码编译如下:

forall(collection) ((_: String) must myMatcher(x) ^^^ (_.toLowerCase))

这可以通过阅读标题为“With sequences”的部分中的specs2文档,并查看所涉及的类型来解决。

此外,匹配器必须是org.specs2.matcher.AdaptableMatcher的子类。如果您正在编写自己的匹配器,则需要自己手动为此类创建子类,因为specs2无法知道您的匹配器正在做什么并且会自动地神奇地调整它。子类AdaptableMatcher的子类的示例是org.specs2.matcher.BeTypedEqualTo

的特定情况下
myMatcher(x) ^^^ (_.toLowerCase)

这个片段可以缩短,并通过替换为:

使其更具可读性和声明性
(myMatcher(x) ignoreCase)

如果myMatcher(x)的类型为AdaptableMatcher[Any],则将其值转换为与字符串进行比较。