2012-09-19 37 views
2

在規範2中,可以使用forallforeach方法將單個項目的匹配器轉換爲原始類型項目序列上的匹配器,並且^^^可以是用於在匹配它們之前預先處理實際的預期值。但是我怎麼能把兩者結合起來呢?在specs2匹配器中結合forall和^^^

我已經試過

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

但是,這並不編譯。

回答

2

這個問題實際上與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]並轉換它的值,以比較字符串。

相關問題