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