Specs2 では、メソッドforall
とforeach
メソッドを使用して、単一のアイテムのマッチャーを元の型の一連のアイテムのマッチャーに変換できます。また、^^^ を使用して、実際の値と期待値を照合する前に前処理することができます。しかし、どうすれば2つを組み合わせることができますか?
私はもう試した
((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)
ifmyMatcher(x)
は型AdaptableMatcher[Any]
を持ち、その値を変換して文字列と比較します。