2012-03-05 52 views
1

私はgroovy map強制を使用してMapをモックしようとしています。 私はさまざまなバリエーションのコードを試しましたが、結果は常にnullでした。map強制を使ってGroovyでjava.util.Mapをモックする方法は?

Map<String, String> map = [get: {String k -> "echo"}] as Map<String, String> 

println map.get("a") 

map = {"echo"} as Map<String, String>を使用している場合は動作します。

最初のバージョンを作成する方法に関するアイデアはありますか?

おかげ

答えて

2

ようなストレート強制を行うと問題がgetを再定義Mapが既にMapであることで、あなたが何をしようとしていることは何かを強要された場合に言うGroovy source強制ではチェックがありますMapのようにMapを入力して、必要に応じてインターフェイスへのプロキシを作成するのではなく、通常はキャストしてください。

Map<String, String> map = new Expando([get: {String k -> "echo"}]) as Map<String, String> 
assert map.get('a') == 'echo' 
+0

わかりましたので、作品上記のコードではなく:あなたはそれはあなたのインターフェイスタイプに強制よ、Expandoのように、あなたのモックオブジェクトMapとは異なる種類を作ることができます。この問題を回避するには

私はそれがすべきだと思った元の理由から。 'Map'という' Map'は私が述べた理由では機能しませんが、上記のコードがどのような仕組みで動作するかを理解する必要があります。 –

+0

この作業を行うための関連するソースパスは見つかりませんでしたが、参考になる可能性のあるエキスパンドを使用するための記事があります:http://docs.codehaus.org/display/GROOVY/Developer+Testing+using+Maps +と+ Expand + + Mocksの代わりに+ Expandos + –

関連する問題