在过滤器中,我使用request.getSession(false)来获取 session ,这没关系。但是当我对其进行单元测试时,request.getSession(false)将返回null obj,并且测试结果失败。如果我想通过测试,则应使用request.getSession(true)。

最佳答案

当且仅当一个不存在的request.getSession(true)创建一个新 session 。如果已经存在,例如在生产环境中,它将使用Java EE servlet容器中可用的那个调用您的代码。

换句话说,您可以在生产环境中当前使用request.getSession(false)的任何地方使用request.getSession()(与getSession(true)相同)。在生产环境中无需执行getSession(false),如果存在,则getSession(true)将始终返回当前 session 。在测试环境中,您当然会得到一个空白 session ,然后您将需要使用该空白 session 填充运行测试所需的任何数据。但是它应该在两个地方都做正确的事情。

请注意,Grails有自己的 session 对象,该对象包装了Java EE session 对象,因此您可能希望使用它...

关于unit-testing - 使用 session 时出现问题,如何决定选择request.getSession(true)还是request.getSession(false),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26599941/

10-14 01:47