单元测试会话变量在控制器与spock



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

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

一个控制器:

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

最新更新