在过滤器中,我使用request.getSession(false)来获取会话,这没关系。但是当我对它进行单元测试时,request.getSession(false)将返回null obj并且测试结果失败。如果我想通过测试,我应该使用request.getSession(true)。
答案 0 :(得分:3)
request.getSession(true)创建一个新会话当且仅当一个尚不存在时。如果已经存在,就像在生产环境中一样,它使用调用代码的Java EE servlet容器中可用的那个。
换句话说,您可以在当前使用request.getSession(false)的生产环境中的任何位置使用request.getSession()(与getSession(true)相同)。生产环境中不需要执行getSession(false),如果存在,则getSession(true)将始终返回当前会话。在测试环境中,您当然会得到一个空白会话,然后您需要填充运行测试所需的任何数据。但它应该在两个地方做正确的事情。
请注意,Grails有自己的会话对象,它包装了Java EE会话对象,因此您可能希望使用它... ...