我遇到了一些非常糟糕的事情,我认为这是一个错误:
我喜欢使用带闭包的Maps来模拟单元测试中的类。最近我尝试模拟实现Map的Quartz类。我得到了非常奇怪的行为,我将其缩小为一个非常简单的单元测试,它只是试图模拟java.util.Map接口。
单元测试如下。如果你运行它,你会注意到我的缩写版本的java.util.Map接口的get()工作(MyMap)。但是当我模仿Map时,它就失败了。我无法弄清楚为什么......在我提交错误之前,我想我会问我的同伴们。提前感谢您的意见 - / chris
package foo
import org.testng.annotations.Test
/*
* Author: cbedford
* Date: 3/26/14
* Time: 4:36 PM
*/
public class GroovyMockTest {
@Test(enabled = true)
public void testMapFails() {
Map map = [
get: { Object key ->
println "getting key: " + key
return 300;
}
] as Map
assert map.get('dummy') == 300
}
@Test(enabled = true)
public void testMyMapFWorks() {
MyMap map = [
get: { Object key ->
println "getting key: " + key
return 300;
}
] as MyMap
assert map.get('dummy') == 300
}
}
public interface MyMap<K,V> {
V get(Object key);
}
答案 0 :(得分:0)
我怀疑这是一个错误。 Groovy地图在从地图获取属性时实施getAt
/ getProperty
/ propertyMissing
,并且调用Map::get
不会触发它,因为该方法存在。
如果您首先获得密钥然后将其用作闭包,则它可以工作:
assert map.get('get')('dummy') == 300
或者:
assert map['get']('dummy') == 300