【问题标题】:Spock No thread-bound request foundSpock 未找到线程绑定请求
【发布时间】:2015-03-27 13:09:19
【问题描述】:

我创建了一个简单的实用程序类 UtilService.groovy,当我尝试为它运行编写测试用例时。 类 UtilService {

static transactional = true

def messageSource


HttpServletRequest getCurrentRequest() {
    GrailsWebRequest webUtils = WebUtils.retrieveGrailsWebRequest()
    def request = webUtils.getCurrentRequest()
    return request
}

String getMessage(String code, Object[] args = null, String defaultMessage = null) {
    HttpServletRequest request = currentRequest
    Locale locale = request.locale
    if (defaultMessage) {
        return messageSource.getMessage(code, args, defaultMessage, locale)
    } else {
        return messageSource.getMessage(code, args, locale)
    }
}

测试用例

@TestMixin(GrailsUnitTestMixin)
class UtilServiceSpec extends Specification {

    void "Test get message"() {
        setup:
            def utilService = new UtilService()

        when:
            String data = utilService.getMessage("payCode.label")

        then:
            data == "Pay Code"
    }
}

错误:

No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? 

我已经搜索并尝试了一些来自 google 的链接,但它们对我不起作用。

【问题讨论】:

    标签: grails spock


    【解决方案1】:

    显然,您是在 Web 请求之外执行此操作,WebUtils.retrieveGrailsWebRequest() 将失败,因为没有 Web 请求正在进行。如果在测试期间从控制器调用您的服务,它应该可以工作。

    您的服务依赖于WebRequest,为什么不将Locale 作为参数传递给getMessage,控制器可以调用getMessage 并传递请求Locale,否则服务将选择默认语言环境。让服务了解 Web API(例如请求、响应、会话等)通常不是一个好主意。您将能够测试服务和控制器。

    【讨论】:

    • 我尝试对语言环境进行硬编码,但 Locale.ENGLISH/Locale.US org.springframework.context.NoSuchMessageException: No message found under code 'payCode.label' for locale 'en'. 出现异常
    • 这意味着您没有该语言环境的 messages.properties
    • 我在默认的 message.properties 文件中有所有消息。你能告诉我为了从默认的 message.properties 文件中读取消息,我应该传递什么 Local
    【解决方案2】:

    我已经为此需求编写了集成测试而不是单元测试,并且能够成功运行我的测试用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      相关资源
      最近更新 更多