1

Groovy マップ強制を使用して Map をモックしようとしています。以下のコードのさまざまなバリエーションを試しましたが、結果は常に null でした。

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

println map.get("a")

私が使用する場合、map = {"echo"} as Map<String, String>それは動作します。

最初のバージョンを機能させる方法についてのアイデアはありますか?

ありがとう

4

1 に答える 1

2

そのようなストレート強制を行うことの問題はMap、再定義するgetものがすでにaであり、 GroovyソースMap強制にチェックがあり、あなたがやろうとしていることがaのようなものを強制することであるかどうかを示し、代わりに通常どおりにキャストすることです。必要に応じて、インターフェイスへのプロキシを作成しようとしています。MapMap

Mapこれを回避するには、モックオブジェクトをのようにとは異なるタイプにすることができますExpando。そうすると、インターフェイスタイプに強制変換されます。

Map<String, String> map = new Expando([get: {String  k -> "echo"}]) as Map<String, String>
assert map.get('a') == 'echo'
于 2012-03-05T23:57:02.120 に答える