我试图测试一个会话变量是在一个控制器中使用单元测试的方法,但它是抱怨设置一个只读属性:
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'
}
}