2

Specs2 では、メソッドforallforeachメソッドを使用して、単一のアイテムのマッチャーを元の型の一連のアイテムのマッチャーに変換できます。また、^^^ を使用して、実際の値期待値を照合する前に前処理することができます。しかし、どうすれば2つを組み合わせることができますか?

私はもう試した

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

しかし、それはコンパイルされません。

4

1 に答える 1

2

問題は実際には とは何の関係もありませんforall。読みやすくするために を前に移動した後forall(これは必要ありません)、次のように書き直してコードをコンパイルすることができます。

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

これは、specs2 のドキュメントの「シーケンスあり」セクションを読み、関連する型を調べることで解決できます。

また、マッチャーは のサブクラスである必要がありorg.specs2.matcher.AdaptableMatcherます。独自のマッチャーを作成している場合は、このクラスを自分で手動でサブクラス化する必要があります。これは、specs2 がマッチャーが何をしているかを認識できず、魔法のように自動的に適応させるためです。クラスのサブクラス化の例AdaptableMatcherorg.specs2.matcher.BeTypedEqualTo.

特定のケースでは

myMatcher(x) ^^^ (_.toLowerCase)

このフラグメントを次のように置き換えることで、短縮して読みやすく宣言的にすることができます。

(myMatcher(x) ignoreCase)

ifmyMatcher(x)は型AdaptableMatcher[Any]を持ち、その値を変換して文字列と比較します。

于 2012-09-19T11:09:35.850 に答える