3

Groovyは、さまざまな選択肢を提供する素晴らしい言語です。

単体テストについて考えるとき、Expandoオブジェクトとクロージャー付きの「as」演算子を使用するのはいつ意味がありますか?

http://groovy.codehaus.org/Developer+Testing+using+Maps+and+Expandos+instead+of+Mocks vs http://groovy.codehaus.org/Developer+Testing+using+Closures+instead+of+モック

単純なケースでは、それらの使用法は非常に似ているようです。

ありがとう!

4

1 に答える 1

4

モックの代わりにクロージャーを使用することに関して参照したページに記載されているように、それ自体はモックインターフェイスに対してのみ機能し、そのインターフェイスに単一のメソッドがある場合にのみ機能します。したがって、テスト対象のクラスがインターフェイスを使用していない場合、または複数のメソッドをモックする必要がある場合は、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の方が好きです。

于 2011-01-17T09:08:03.853 に答える