当从 Grails 2.0.0 迁移到 2.1.2 时,我们的一些测试开始以 NullPointerException 失败(在 Grails 2.0.3 中观察到相同的行为)
以下是足以重现该问题的代码片段。
控制器:_
class TestController {
def test() {
render(template: "/test")
}
}
单元测试:
import static org.junit.Assert.*
import grails.test.mixin.*
import grails.test.mixin.support.*
import org.junit.*
import grails.test.mixin.web.GroovyPageUnitTestMixin
@TestMixin(GroovyPageUnitTestMixin)
@TestFor(TestController)
class TestControllerTests {
void test_paramsAndSession_Null() {
controller.test()
def result = response.text
print result
assert render(template: "/test") == result
}
}
模板_test.gsp :
Params and session test.
Params(<%params.id1%>)<br/>
Session(<%session.id2%>)<br/>
使用 Grails 2.0.0,应用程序和测试工作正常。
使用 Grails 2.1.2 应用程序仍然可以正常工作,但测试开始失败并出现 NullPointerException:
java.lang.NullPointerException: Cannot get property 'id1' on null object
at D__Eclipse_Workspace_paramsAndSessionTest_grails_app_views__test_gsp.run(_test.gsp:2)
at TestController.test(TestController.groovy:4)
at TestControllerTests.test_paramsAndSession_Null(TestControllerTests.groovy:12)
java.lang.NullPointerException: Cannot get property 'id2' on null object
at D__Eclipse_Workspace_paramsAndSessionTest_grails_app_views__test_gsp.run(_test.gsp:3)
at TestController.test(TestController.groovy:4)
at TestControllerTests.test_paramsAndSession_Null(TestControllerTests.groovy:12)
(应用下面的修复(1)时出现第二个异常)
这是什么原因?
我看到我可以修复测试进行以下更改:
params.id1 -> params?.id1 (1)
session.id2 -> session?.id2
但这看起来不像是一个有效的解决方案(改变我的单元测试应用程序工作)。
请帮助我了解是我做错了什么还是 Grails 中存在错误。
更新:我提交了一个错误http://jira.grails.org/browse/GRAILS-9718