モックの代わりにクロージャーを使用することに関して参照したページに記載されているように、それ自体はモックインターフェイスに対してのみ機能し、そのインターフェイスに単一のメソッドがある場合にのみ機能します。したがって、テスト対象のクラスがインターフェイスを使用していない場合、または複数のメソッドをモックする必要がある場合は、ExpandoまたはMapのいずれかを使用する必要があります。私は一貫性があり、常にMapを使用することを好みます。私が扱うコードでは、単一のインターフェイスメソッドでモックされたオブジェクトが必要になることはめったになく、Mapを使用する場合はそれ以上のキーストロークは必要ありません。
interface Foo {
def someMethod(s)
}
// Closure, this breaks if someOtherMethod() is added to Foo or if Foo is a class
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest(mockMetod as Foo)
// Map
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest([someMethod:mockMethod] as Foo)
MapとExpandoを使用してオブジェクトをモックすることに大きな違いがあるかどうかはわかりませんが、Mapリテラルを宣言でき、Expandoを新しくする必要がないという理由だけで、Mapの方が好きです。