私はmockitoとHttpSessionクラスでユニットテストを行う方法を長い間探しています。私は何も見つけていないので、ここで尋ねています。HttpSessionを使用したMockitoによるユニットテストサーブレットフィルタ
私はJavaEEでWebアプリケーションを持っています。カスタムのUserクラスを使用してWebサイトにログオンする3つのフィルタを実装しました。ユーザーのタイプごとに1つのフィルター。私はJUnitとMockitoでそれらをテストする必要があります。ここでの唯一の問題は、httpSessionとhttpServletRequestの動作を再現することに成功しなかったことです。 テストがフィルタコードを通過するときに、session.getAttribute("User")
になると、nullポインタ例外が返されます。 このコードで視力を上げてもらえますか?基本的には、セッションをエミュレートして「user」属性を取得し、リダイレクトが正しいかどうかを検証する必要があります。
フィルターコード:
/**
* Default constructor.
*/
public RestrictionFilterCaseAdmin ()
{
// TODO Auto-generated constructor stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req , ServletResponse res ,
FilterChain chain)
throws IOException , ServletException
{
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
/* Creating temp user */
if (session.getAttribute("User") != null) {
User userTmp = new User();
userTmp = (User) session.getAttribute("User");
/**
* If the user object don't exist, the user is not
* connected.
*/
if (userTmp.getLogin() == null) {
/* Public page redirection */
response.sendRedirect(request.getContextPath()
+ "/connexion");
} else if (userTmp.getStatus().equals("admin")) {
/* Restricted page redirection */
chain.doFilter(request , response);
} else {
// User not allowed to dislay the page, go back
// to home.
response.sendRedirect(request.getContextPath()
+ "/redirect");
}
} else {
response.sendRedirect(request.getContextPath()
+ "/connexion");
}
}
@ Override
public void destroy()
{
// TODO Auto-generated method stub
}
@ Override
public void init(FilterConfig arg0) throws ServletException
{
// TODO Auto-generated method stub
}
テストコード:
@ Mock
HttpServletRequest httpServletRequest;
@ Mock
HttpServletResponse httpServletResponse;
@ Mock
FilterChain filterChain;
@ Mock
User userTest;
@ Mock
HttpSession sessionTest;
@ Before
public void setUp()
{
httpServletRequest = mock(HttpServletRequest.class);
httpServletResponse = mock(HttpServletResponse.class);
filterChain = mock(FilterChain.class);
userTest = mock(User.class);
sessionTest = mock(HttpSession.class);
}
@ Test
public void testDoFilter() throws IOException , ServletException
{
userTest.setLogin("test");
userTest.setPwd("test");
userTest.setStatus("admin");
sessionTest.setAttribute("User" , userTest);
when(sessionTest.getAttribute("User"))
.thenReturn(userTest);
when(httpServletRequest.getSession(true))
.thenReturn(sessionTest);
when(httpServletRequest.getRequestURI())
.thenReturn("/Home.jsp");
RestrictionFilterCaseAdmin adminFilter = new RestrictionFilterCaseAdmin();
adminFilter.doFilter(httpServletRequest , httpServletResponse ,
filterChain);s
verify(httpServletResponse).sendRedirect(
"/restricted/admin/restrictedAdminTest.jsp");
}
はどうもありがとうございました! JK