【发布时间】:2015-04-08 04:02:46
【问题描述】:
我是 grails 新手,在集成测试方面遇到困难。我有一个服务类,它在内部从私有方法调用外部服务。有什么方法可以模拟这个私有方法,这样我就可以避免集成测试的外部服务调用?请指导我。
示例代码如下:
import org.springframework.web.client.RestTemplate;
public class Service {
final static RestTemplate REST = new RestTemplate()
def get() {
def list = REST.getForObject(url, clazzObject, map)
list
}
}
集成测试类
class RackServiceIntegrationSpec extends IntegrationSpec {
def service = new Service()
void testApp(){
setup:
def testValues = ["name1", "name2"]
service.metaClass.get = {String url, Class clazz, Map map -> testValues}
when:
def val = service.get()
then:
val.get(0) == 'name1'
}
}
它实际上不是模拟 rest 调用,而是进行原始的 rest 调用并从数据库中获取值。我在这里做错了吗?
【问题讨论】:
-
当您需要模拟私有方法时,它通常表示设计不佳。为什么你需要模拟这个方法?相反,应该模拟外部服务。
-
私有方法具有进行外部服务调用的逻辑。我想绕过该服务并通过返回预定义的值来模拟它。
-
这不是一个好的决定,嘲笑服务是更好的主意。
-
谢谢@Opal。我这里更新了测试代码。
标签: grails integration-testing spock