3

Groovy 是一种很棒的语言,它提供了许多不同的选择。

在考虑单元测试时,什么时候使用 Expando 对象而不是带有闭包的“as”运算符?

http://groovy.codehaus.org/Developer+Testing+using+Maps+and+Expandos+instead+of+Mockshttp://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 只是因为您可以声明 Map 文字的好方法,而不必新建 Expando。

于 2011-01-17T09:08:03.853 回答