嗨我是junit的初學者,我偶然發現了在我的servlet中定義的init()方法的junit。如何編寫init()的junit?
這是我的servlet。
public class EmailSendingServlet extends HttpServlet{
private static final long serialVersionUID = -7796409155466523414L;
/**
* Creates an Email Model Object
*/
Email emailMessage = new Email();
/**
* Overrides the init constructor of servlet
*
*/
public void init() {
ServletContext context = getServletContext();
emailMessage.setHostName(context.getInitParameter("host"));
emailMessage.setPortName(context.getInitParameter("port"));
}
/**
* Overrides the Service method of Generic Servlet
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
emailMessage.setFrom(request.getParameter("from"));
emailMessage.setRecipient(request.getParameterValues("recipients"));
emailMessage.setSubject(request.getParameter("subject"));
emailMessage.setBody(request.getParameter("body"));
emailMessage.setFile(request.getParameterValues("file"));
String resultMessage = "";
try {
EmailUtility.sendEmail(emailMessage);
resultMessage = "The Email was sent successfully";
request.setAttribute("message", resultMessage);
response.setContentType("text/html");
RequestDispatcher view = request.getRequestDispatcher("/Result.jsp");
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
和下面給出的是我的servlet類的測試用例:
@RunWith(PowerMockRunner.class)
public class EmailSendingServletTest extends Mockito
{
@Test
public void TestEmailSendingServlet() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
RequestDispatcher requestDispatcher = mock(RequestDispatcher.class);
when(request.getParameter("from")).thenReturn("[email protected]");
String[] recipients = new String [3];
recipients[0] = "[email protected]";
recipients[1] = "[email protected]";
recipients[2] = "[email protected]";
when(request.getParameterValues("recipients")).thenReturn(recipients);
when(request.getParameter("subject")).thenReturn("Test Mail");
when(request.getParameter("body")).thenReturn("This is Body");
String[] files = new String[1];
files[0] = "C:\\Users\\asara3\\Documents\\Architecture.jpg";
when(request.getParameterValues("file")).thenReturn(files);
when(request.getRequestDispatcher("/Result.jsp")).thenReturn(requestDispatcher);
try {
new EmailSendingServlet().doPost(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我有點糊塗了存根的context.getInitParameter(「主機」)在我的測試案例?任何幫助傢伙?
注意:不要在您的測試用例中捕獲異常。如果引發異常,此測試將通過。向測試方法簽名添加'throws'。 –
不應該有任何init()方法。 emailMessage變量應該是doPost()的局部變量。請記住,同一個唯一的servlet實例同時處理對該servlet的所有請求。您不希望兩個請求寫入同一個EmailMessage對象。 –
@AndyTurner感謝您的建議。將照顧這一點。 – user3476378