Grails模拟正在失败

Grails模拟正在失败,grails,integration-testing,spock,Grails,Integration Testing,Spock,我已经编写了一个正在进行集成测试的服务。该服务在内部调用外部rest服务并填充值 服务等级 为了避免实际的外部服务调用,我尝试如下模拟它 class ServiceIntegrationSpec extends IntegrationSpec { void testList() { setup: List<Employee> list = new ArrayList<>() list.add(new

我已经编写了一个正在进行集成测试的服务。该服务在内部调用外部rest服务并填充值

服务等级 为了避免实际的外部服务调用,我尝试如下模拟它

class ServiceIntegrationSpec extends IntegrationSpec {

    void testList() {
        setup:
            List<Employee> list = new ArrayList<>()
            list.add(new Employee(id:"123", name: "test1"))
            list.add(new Employee(id:"146", name: "test2"))
            def clazz = String.class
            def url  = ""
            def emptyMap = [:]
            rackService.TEMPLATE.metaClass.getForObject = {String url, Class clazz,
            Map emptyMap ->list}

        when:
            def val = service.getList()

        then:
            val != null
    }
}
class ServiceIntegrationSpec扩展了IntegrationSpec{
void testList(){
设置:
列表=新的ArrayList()
添加(新员工(id:“123”,姓名:“test1”))
添加(新员工(id:“146”,姓名:“test2”))
def clazz=String.class
def url=“”
def emptyMap=[:]
rackService.TEMPLATE.metaClass.getForObject={字符串url,类clazz,
映射空映射->列表}
什么时候:
def val=service.getList()
然后:
val!=null
}
}
当使用命令grailstest-app-integration:运行集成测试时,我得到以下错误:

  • 当前作用域已包含变量url
  • 当前作用域已包含变量clazz
  • 当前作用域已包含变量emptyMap

  • 您尝试重命名元类方法的变量

    rackService.TEMPLATE.metaClass.getForObject = {String urlParameter, Class clazzParameter,
            Map emptyMap ->listParameter}
    

    不需要预先定义url、clazz和emptyMap。 代码

            def clazz = String.class
            def url  = ""
            def emptyMap = [:]
            rackService.TEMPLATE.metaClass.getForObject = {String url, Class clazz,
            Map emptyMap ->list}
    
    可替换为

            rackService.TEMPLATE.metaClass.getForObject = {String url, Class clazz,
            LinkedHashMap emptyMap ->list}
    
    请注意,groovy默认将此空映射[:]视为LinkedHashMap。请在下面找到参考资料:

            rackService.TEMPLATE.metaClass.getForObject = {String url, Class clazz,
            LinkedHashMap emptyMap ->list}