Я новичок в groovy и Spock.
Я пытаюсь создать универсальный метод для насмешки объектов в моей системе.
проблема
Я пытаюсь создать функцию, которая получит объект и динамически смоделирует функции, которые я хочу в объекте.функция получает карту функций с данными, когда имитировать каждый из них и что возвращать.функции возвращают ошибку.
Я создал класс
class MetaData {
Object[] argTypes
def returnValue
Object[] argsMatchers
MetaData(Object[] argTypes, returnValue, Object[] argsMatchers) {
this.argTypes = argTypes
this.returnValue = returnValue
this.argsMatchers = argsMatchers
}
}
Функция пересмешки:
def mockFunctionTestData(Map overrides = [:], def clazz){
def args = Mock(clazz)
overrides.each { String key, value ->
Object[] argTypes = value.argTypes
if(args.metaClass.respondsTo(args, key, argTypes).size() == 1){
def methodToGetRequest = key
def argsMatchers = value.argsMatchers
def returnValue = value.returnValue
args."$methodToGetRequest"(*argsMatchers) >> returnValue
} else {
println "Error: Trying to add property that doesn't exist"
}
}
return args
}
Я создаю объект:
def functionData = new MetaData([Date, Date, List, boolean] as Object[],
meas,
[_ as Date, _ as Date, new ArrayList<>(), true] as Object[]) //the line that fails
def dogDAO = [getDogData: functionData]
def testDog= mockFunctionTestData(dogDAO , Dog)
приведенный выше код возвращает следующее исключение:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '_' with class 'org.spockframework.lang.Wildcard' to class 'java.util.Date' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Date(org.spockframework.lang.SpreadWildcard)
строка, которая не работает
[_ as Date, _ as Date, new ArrayList<>(), true] as Object[])