我编写了一个简单的HTTP实用程序类,它接受HTTP方法名称和请求URL,然后返回响应。
在我的Grails应用程序中,有几个服务将使用此实用程序来获取某些Web API调用的结果。但是,我不知道如何对这些服务进行单元测试。该实用程序非常简单,只使用HttpURLConnection
执行HTTP请求,没有任何其他依赖项。
我应该如何对这些服务进行单元测试?我应该将该实用程序作为服务的属性,以便可以在它们上注入和模拟此实用程序吗?
有什么建议吗?
答案 0 :(得分:1)
您可以创建一个MockHttpUtility,然后将其用于测试环境。
您可以修改resources.groovy,以便对于测试,mockService将注入您的服务/控制器而不是实际服务。
switch(GrailsUtil.environment) {
case "test":
httpUtil(MockHttpUtil) {bean ->
bean.autowire = "byName"
}
}
这适用于集成测试。
对于单元测试,您可以将模拟服务定义如下
void testFoo() {
defineBeans {
httpUtil(MockHttpUtil)
}
}
您可以设计模拟http util,以便在调用时返回预期的响应。例如,你可以有一个构造函数或一个将获得预期响应的setter,当使用http方法和url调用实用程序方法时,它将返回给定的响应。