2013-02-06 31 views
1

我正在处理大型复杂的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) 

回答

0

我假设你指的是可以通过调用HttpSession.invalidate()无效的HttpSession之一。尽管诚实地说,你的问题提供的信息太少,无法给出正确的答案。你的设置是什么?你有什么尝试?你的代码是什么样的?你在嘲笑你的Servlet容器吗?等等...

没有代码的问题很难回答。

+0

感谢您的评论,我添加了更多的细节。我认为主要问题是从测试代码远程使会话无效。 – user833970

+0

仍然太少了。你能分享你所描述的错误(stacktrace)吗?“它会发送一个错误”。运行你的服务器和使用TapestryTestCase的结合听起来也不错。这可能意味着你有一个Mocked挂毯HttpSession和一个真正的HttpSession。你的目标应该是在你的测试中访问真正的HttpSession并使其失效。但没有任何代码,我无法帮助。 – joostschouten

+0

TapestryTestCase和HTTP测试是分开的,都存在使测试中的缓存无效的问题。这个错误在我们庞大的系统中是内部的,但是源于某人直接查询会话(例如,获取或设置区域信息)。我想对这种态度主义者进行测试。 – user833970