使用spock在控制器中测试会话变量

时间:2014-07-25 09:35:04

标签: unit-testing grails groovy spock

我试图在Grails控制器中使用单元测试来测试控制器中的方法中是否设置了会话变量,但它抱怨设置只读属性:

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!"
    }
}

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

1 个答案:

答案 0 :(得分:2)

以下测试将通过Grails 2.1.0

控制器:

// 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'
    }
}