我正在尝试使用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'
    }
}

09-30 13:52
查看更多