簡體   English   中英

如何編寫init()的junit?

[英]How to write junit of init()?

嗨,我是junit的初學者,我偶然發現了我在servlet中定義的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("robi@robi.com");
            String[] recipients = new String [3];
            recipients[0] = "abc@abc.com";
            recipients[1] = "xyz@xyz.com";
            recipients[2] = "qwe@qwe.com";
            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(“ host”)嗎? 有幫助嗎?

您可以使用Mockito的spy()方法來模擬getServletContext()方法的行為。

例如,將其添加到setup()方法或單元測試類的構造函數中:

public class EmailSendingServletTest {
  ...
  private EmailSendingServlet emailSendingServlet;
  private EmailSendingServlet emailSendingServletSpy;
  ...

  public EmailSendingServletTest(){
    emailSendingServlet =  new EmailSendingServlet();
    emailSendingServletSpy = Mockito.spy(emailSendingServlet);
  }
}

然后,您可以像這樣模擬getServletContext()方法:

Mockito.doReturn(yourMockedServletContext).when(emailSendingServletSpy.getServletContext());

通常,我會避免進行間諜活動(模擬待測對象),但是在第三方依賴項作為servlet的情況下,這是可以接受的情況,因為重構無法執行,否則將迫使我們不以第三方的方式編寫標准更改。使用方依賴。 這通常也是不可取的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM