2
在規範2中,可以使用forall
和foreach
方法將單個項目的匹配器轉換爲原始類型項目序列上的匹配器,並且^^^可以是用於在匹配它們之前預先處理實際的和預期值。但是我怎麼能把兩者結合起來呢?在specs2匹配器中結合forall和^^^
我已經試過
((s must myMatcher(x)) ^^^ (_.toLowerCase)).forall(collection)
但是,這並不編譯。
在規範2中,可以使用forall
和foreach
方法將單個項目的匹配器轉換爲原始類型項目序列上的匹配器,並且^^^可以是用於在匹配它們之前預先處理實際的和預期值。但是我怎麼能把兩者結合起來呢?在specs2匹配器中結合forall和^^^
我已經試過
((s must myMatcher(x)) ^^^ (_.toLowerCase)).forall(collection)
但是,這並不編譯。
這個問題實際上與forall
無關。移動forall
到前增加可讀性(這是沒有必要的)後,代碼可製成通過重寫它來編譯如下:
forall(collection) ((_: String) must myMatcher(x) ^^^ (_.toLowerCase))
並且這可以通過讀取文檔specs2制定出「帶序列」一節,並查看涉及的類型。
此外,匹配器需要是org.specs2.matcher.AdaptableMatcher
的子類。如果你正在編寫你自己的匹配器,你將需要手動爲這個類自動分類,因爲specs2無法知道你的匹配器正在做什麼,並且魔法般地自動調整它。類別子類別AdaptableMatcher
的示例是org.specs2.matcher.BeTypedEqualTo
。
在
myMatcher(x) ^^^ (_.toLowerCase)
該片段的特定情況下可以縮短,通過用替換它更加可讀和聲明:
(myMatcher(x) ignoreCase)
如果myMatcher(x)
具有類型AdaptableMatcher[Any]
並轉換它的值,以比較字符串。