我已经编写了一项服务,正在进行集成测试。该服务在内部调用外部休息服务并填充该值。
import org.springframework.web.client.RestTemplate;
class Service {
final static RestTemplate TEMPLATE = new RestTemplate()
def getList() {
final String info = TEMPLATE.getForObject(getHostUrl(), String.class,[:])
return info
}
为了避免实际的外部服务呼叫,我试图模仿它如下。
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
}
}
使用以下命令运行集成测试时:grails test-app integration:,我收到以下错误:
答案 0 :(得分:0)
您尝试重命名元类方法的变量
rackService.TEMPLATE.metaClass.getForObject = {String urlParameter, Class clazzParameter,
Map emptyMap ->listParameter}
答案 1 :(得分:0)
无需事先定义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。请在下面找到参考:
http://www.javaworld.com/article/2073116/java-collections-default-implementation-choices--groovy-s-opinion.html