2015-05-13 51 views
0

我想重寫方法調用groovy sql類,我能做到這一點。但我需要有不同的實現基於順序。Groovy metaclass基於調用順序添加多個方法不模擬

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. 
+0

可能重複http://stackoverflow.com/questions/26737268/mock-out-return-of-a-method - 僅在調用中的數量) – dmahapatro

回答

0

實現它的一種方法是使用類中的內部標誌。 然後根據標誌調用不同的實現。

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

如果我想要這些調用,該怎麼辦? Sql.metaClass.call = {String sql,List params,Closure c - > c(mockResultSet)//第一次} Sql.metaClass.call = {String sql,List params - > params} //第二次 – mohanaki

0

感謝@Joachim的建議。這對我有用。

def counter = 1 
    Sql.metaClass.call = {String sql, List params, Closure c -> 
     if(counter ==1) { 
      c(mockResultSet) 
      counter++; 
     }else{ 
      c(expectedLookupId) 
     } 
    } 
的([在調用僅在斯波克的數量的方法的鹼模擬出來返回]