unit-testing - 使用 spock 在 Controller 中单元测试 session 变量

标签 unit-testing grails groovy spock

我正在尝试使用 Grails Controller 中的单元测试在 Controller 中的方法中设置 session 变量,但它提示设置只读属性:

Cannot set readonly property: session for class: MyController

我有这样的事情:
class MyController {
   def settingSession = {
       session.var1 = "hello world!"
   }
}

这将是我的测试:
class MyControllerUnitTest extends ControllerSpec {
    def "My test with sessions"() {
       when:
            controller.settingSession()
       then:
            controller.session.var1 == "hello world!"
    }
}

我邀请我可能应该编写一个集成测试,但我想知道是否有可能在单元测试中这样做。

最佳答案

以下测试将通过 Grails 2.1.0

Controller :

// grails-app/controllers/demo/MyController.groovy
package demo

class MyController {

    def settingSession() {
        session.band = 'King Crimson'
    }
}

单元测试:
// test/unit/demo/MyControllerTests.groovy
package demo

import grails.test.mixin.*
import org.junit.*

@TestFor(MyController)
class MyControllerTests {

    void testSettingSession() {
        controller.settingSession()

        assert session.band == 'King Crimson'
    }
}

如果您使用 Spock:
// test/unit/demo/MyControllerSpec.groovy
package demo

import grails.test.mixin.*
import spock.lang.Specification

@TestFor(MyController)
class MyControllerSpec extends Specification {

    void 'test session'() {
        when:
        controller.settingSession()

        then:
        session.band == 'King Crimson'
    }
}

关于unit-testing - 使用 spock 在 Controller 中单元测试 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952537/

相关文章:

spring - 如何使用 XML 模式来验证由 JAXB 编码的 @ResponseBody

c# - Moq 单元测试用例 - 带有 WebAPI 的 ASP.NET MVC

grails - Grails Controller 渲染方法render vs response

groovy - def 与 Groovy 中的最终 def

dictionary - 为什么我无法获得与在 Groovy 中映射的完全相同的 GString?

react-native - React Native Jest - 如何使用多个钩子(Hook)测试功能组件?无法 stub AccessibilityInfo 模块

java - 如何从命令行(没有 Maven/Gradle)启动 JUnit 5(平台)?

grails - 如何获取grails中一列的所有数据?

grails - 如何从我的服务中获取状态?

grails - 在Groovy单元测试中重写JdbcTemplate方法