Groovy元类基于调用顺序添加多个方法而不是模拟

时间:2015-05-13 15:04:41

标签: groovy spock

我试图在groovy sql类上覆盖方法调用,我能够做到。但是我需要根据顺序进行不同的实现。

 Sql.metaClass.call = {String sql, List params, Closure c -> c(mockResultSet)}      //first time should call this method
 Sql.metaClass.call = {String sql, List params, Closure c -> c(expectedLookupId)}   //second time should call this method.

2 个答案:

答案 0 :(得分:0)

实现它的一种方法是在类中使用内部标志。 然后根据标志调用不同的实现。

Sql.metaClass.first = true
Sql.metaClass.call = {String sql, List params, Closure c ->    
   if (first){
     c(mockResultSet)
     first = false
   }else{
     c(expectedLookupId)
   }
}     

答案 1 :(得分:0)

感谢@Joachim的建议。这对我有用。

    def counter = 1
    Sql.metaClass.call = {String sql, List params, Closure c ->
        if(counter ==1 ) {
            c(mockResultSet)
            counter++;
        }else{
            c(expectedLookupId)
        }
    }