httpセッションごとにユーザーデータを保持するセッションスコープのBeanがあります。セッション スコープ Bean をテストする Junit テスト ケースを作成したいと思います。Bean がセッションごとに作成されていることを証明できるように、テスト ケースを作成したいと思います。このような Junit テスト ケースを作成する方法についての指針はありますか?
27923 次
3 に答える
30
単体テストでリクエストスコープとセッションスコープを使用するには、次のことを行う必要があります。
- これらのスコープをアプリケーションコンテキストに登録する
- モックセッションを作成してリクエストする
- 経由でモックリクエストを登録する
RequestContextHolder
このようなもの(Spring TestContextを使用してテストを実行すると仮定します)
abstractSessionTest.xml
::
<beans ...>
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="session">
<bean class="org.springframework.web.context.request.SessionScope" />
</entry>
<entry key="request">
<bean class="org.springframework.web.context.request.RequestScope" />
</entry>
</map>
</property>
</bean>
</beans>
。
@ContextConfiguration("abstractSessionTest.xml")
public abstract class AbstractSessionTest {
protected MockHttpSession session;
protected MockHttpServletRequest request;
protected void startSession() {
session = new MockHttpSession();
}
protected void endSession() {
session.clearAttributes();
session = null;
}
protected void startRequest() {
request = new MockHttpServletRequest();
request.setSession(session);
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
}
protected void endRequest() {
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).requestCompleted();
RequestContextHolder.resetRequestAttributes();
request = null;
}
}
これで、テストコードで次のメソッドを使用できます。
startSession();
startRequest();
// inside request
endRequest();
startRequest();
// inside another request of the same session
endRequest();
endSession();
于 2011-02-28T09:14:27.250 に答える
30
私はこのより単純なアプローチに出くわしました.他の人が必要とする場合に備えて、ここに投稿したほうがよいと思いました.
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="session">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
このアプローチでは、リクエスト/セッション オブジェクトをモックする必要はありません。
ソース: http://tarunsapra.wordpress.com/2011/06/28/junit-spring-session-and-request-scope-beans/
于 2012-01-10T12:19:38.060 に答える