我正在处理大型复杂的Tapestry服务。它通常有效,但有时运行一段时间后,它所处的会话将失效,并且会发出错误。这个服务没有什么需要这个会话,但有时候它依赖于一个服务,它依赖于“需要”会话的服务。从JUnit测试中使Tapestry中的会话无效
我想在我的测试中务实地使会话无效,所以我可以防止回归。理想情况下,我会这样做,而不会在生产代码中终止会话,现在我正在测试它。
具体而言,我们通过运行服务器和进行http调用来测试服务,并且还通过扩展TapestryIoCTestCase来测试服务。我想不出任何干净的方法来使http客户端测试中的会话无效。为TapestryIoCTestCase创建的模拟会话不支持失效。
我已经考虑过在测试中设置会话超时,但我希望能有更直接的东西。
感谢
Ë例如有人在somepoint想设置的语言环境中我们依赖
java.lang.IllegalStateException: setAttribute: Session [31943F300613D2105C9AF8602397557D] has already been invalidated
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1437)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1402)
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:156)
at org.apache.tapestry5.internal.services.SessionImpl.setAttribute(SessionImpl.java:67)
at org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy.set(SessionApplicationStatePersistenceStrategy.java:68)
at $ApplicationStatePersistenceStrategy_13c1cafe292.set($ApplicationStatePersistenceStrategy_13c1cafe292.java)
at org.apache.tapestry5.internal.services.ApplicationStateManagerImpl$ApplicationStateAdapter.set(ApplicationStateManagerImpl.java:50)
at org.apache.tapestry5.internal.services.ApplicationStateManagerImpl.set(ApplicationStateManagerImpl.java:138)
at $ApplicationStateManager_13c1cafe272.set($ApplicationStateManager_13c1cafe272.java)
感谢您的评论,我添加了更多的细节。我认为主要问题是从测试代码远程使会话无效。 – user833970
仍然太少了。你能分享你所描述的错误(stacktrace)吗?“它会发送一个错误”。运行你的服务器和使用TapestryTestCase的结合听起来也不错。这可能意味着你有一个Mocked挂毯HttpSession和一个真正的HttpSession。你的目标应该是在你的测试中访问真正的HttpSession并使其失效。但没有任何代码,我无法帮助。 – joostschouten
TapestryTestCase和HTTP测试是分开的,都存在使测试中的缓存无效的问题。这个错误在我们庞大的系统中是内部的,但是源于某人直接查询会话(例如,获取或设置区域信息)。我想对这种态度主义者进行测试。 – user833970