unit-testing - 在 Grails 中对服务进行单元测试时如何模拟请求

标签 unit-testing grails groovy spock

我正在尝试对具有需要请求对象的方法的服务进行单元测试。

import org.springframework.web.context.request.RequestContextHolder as RCH

class AddressService {

    def update (account, params) {
        try {
            def request = RCH.requestAttributes.request
            // retrieve some info from the request object such as the IP ...
            // Implement update logic
        } catch (all) { 
            /* do something with the exception */ 
        }
    }
}

你如何模拟请求对象?

顺便说一句,我正在使用 Spock 对我的类(class)进行单元测试。

谢谢

最佳答案

此代码似乎适用于基本单元测试( modified from Robert Fletcher's post here ):

void createRequestContextHolder() {
    MockHttpServletRequest request = new MockHttpServletRequest()
    request.characterEncoding = 'UTF-8'

    GrailsWebRequest webRequest = new GrailsWebRequest(request, new MockHttpServletResponse(), ServletContextHolder.servletContext)
    request.setAttribute(GrailsApplicationAttributes.WEB_REQUEST, webRequest)

    RequestContextHolder.setRequestAttributes(webRequest)
}

它可以作为函数添加到您的标准 Grails 单元测试中,因为函数名称不以“test”开头......或者您可以以其他方式处理代码。

关于unit-testing - 在 Grails 中对服务进行单元测试时如何模拟请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259307/

相关文章:

c# - 编写 unittest 以创建一个文件,然后删除该文件

c# - TryUpdateModel 仅在更新子对象的单元测试中失败

javascript - 在 grails 中打开一个缩小尺寸的新窗口

javascript - 在GSP页面文本区域中显示数据

spring - Grails:如何使用 bean 构建 DSL 指定 Spring 组件扫描排除

javascript - 如何在 qunit 测试中比较两个事物?

unit-testing - 如何在VS2013中自动运行单元测试

Grails,createLink 生成错误的链接

spring - Grails:使用 config.groovy 中定义的值初始化静态变量

groovy - Groovy 中最接近 Elvis 运算符逆向的是什么?