unit-testing - Grails - 如何对使用简单 HTTP 实用功能的服务进行单元测试?

标签 unit-testing grails

我编写了一个简单的 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/

相关文章:

c# - 即使在 CallBase = true/false 之后,原始方法仍然在 Moq 中被调用

php - 如何从命令行运行使用 Google App Engine PHP SDK 函数的应用测试

ios - 使用AFNetworking与OCMock的测试方法

javascript - Mocha JS : grep not matching any tests

javascript - 如何检查注入(inject) Controller 中的功能?

grails - 交易不会通过AutoFlush在IntregrationSpecs上回滚

ruby - Grails上的Cuke4Duke

grails - 为什么我在 grails g :link tag? 创建的链接末尾看到双星号

grails - 运行此代码时获取NullPointerException

hibernate - 在Gorm条件中:按属性过滤域内的集合