为什么这个Groovy MetaClass语句适用于Sql类?

时间:2011-01-16 20:23:43

标签: sql unit-testing grails groovy junit

为什么这行单元测试代码有效? groovy.sql.Sql没有无参数构造函数。

Sql.metaClass.constructor = { dataSource -> return new Sql(); }

该行是grails应用程序中的其他一行,它模拟了Sql对象的构造函数及其方法之一。它很棒。

查看Sql对象的API,我没有看到无参数构造函数:http://groovy.codehaus.org/api/groovy/sql/Sql.html

这种使用Sql.metaClass.constructor覆盖构造函数的方式是我在以下位置找到的: http://manuel-palacio.blogspot.com/2010/07/groovy-tip-metaprogramming-1.html

谢谢!

1 个答案:

答案 0 :(得分:1)

groovy.sql.Sql没有公共的no-args构造函数,但是as can be seen in the source,它确实有一个私有的no-args构造函数 - 我想是为了支持语法new Sql(connection: connection)?< / p> 但是,我有点惊讶的是,这种存根技术不会产生异常,例如,在运行sql.execute之类的时候。