【问题标题】:Unit test failing in Intellij 13 but passes via command lineIntellij 13 中的单元测试失败,但通过命令行通过
【发布时间】:2023-04-09 02:04:01
【问题描述】:

我有一个非常简单的单元测试,用于测试将当前用户呈现为 JSON 的控制器操作。这是我的测试类:

@TestFor(UserController)
class UserControllerSpec extends Specification {

    def setup() {
        def springSecurityService = mockFor(SpringSecurityService)
        springSecurityService.demand.getCurrentUser { -> [name: "Jim"] }
        controller.springSecurityService = springSecurityService.createMock()
    }

    def cleanup() {
    }

    void "test current"() {
        when:
        request.method = 'GET'
        controller.current()

        then:
        response.json.name == "Jim"
    }
}

这里是控制器(省略无关代码)

def springSecurityService

static responseFormats = ['json']

static allowedMethods = [current: "GET"]

def current() {
    respond(springSecurityService.currentUser)
}

我正在通过grails test -unit package.class 单独执行此测试,它通过命令行运行:

|Running 1 unit test... 1 of 1
|Completed 1 unit test, 0 failed in 0m 11s
.
|Tests PASSED - view reports in ...\target\test-reports

这不适用于 IntelliJ,因为 springSecurityService.currentUser 始终为空。这是产生的异常:

org.codehaus.groovy.grails.web.converters.exceptions.ConverterException: Error parsing JSON
    at grails.converters.JSON.parse(JSON.java:292)
    at org.codehaus.groovy.grails.plugins.testing.AbstractGrailsMockHttpServletResponse.getJson(AbstractGrailsMockHttpServletResponse.groovy:97)
    at massemailsystem.UserControllerSpec.test current(UserControllerSpec.groovy:28)
Caused by: org.codehaus.groovy.grails.web.json.JSONException: Missing value. at character 0 of 
    at org.codehaus.groovy.grails.web.json.JSONTokener.syntaxError(JSONTokener.java:470)
    at org.codehaus.groovy.grails.web.json.JSONTokener.nextValue(JSONTokener.java:357)
    at grails.converters.JSON.parse(JSON.java:283)
    ... 2 more

有什么想法吗?

【问题讨论】:

  • 在您的设置中,您配置了getCurrentUser,但您的代码调用了currentUser。除非这里发生了什么事情,否则这可能是潜在的罪魁祸首。
  • @Lilshieste 在 groovy 中,getCurrentUser 是从 currentUser 调用的

标签: unit-testing grails intellij-idea spock intellij-13


【解决方案1】:

您需要在 IntelliJ 中将此测试用例作为 grails 测试用例运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 2019-07-31
    • 2011-04-18
    • 2018-05-13
    • 1970-01-01
    • 2021-05-09
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多