簡體   English   中英

使用Mockito進行Servlet測試用例的JUnit

[英]JUnit using Mockito for Servlet Test Case

我嘗試針對JUnit測試用例對servlet進行基本模擬。 但是,我從這個特定的測試案例中獲得了0個代碼覆蓋率。 這是我的測試用例:

    @Test
    public void testServlet() throws ServletException, IOException {
        HttpServletRequest request = mock(HttpServletRequest.class);       
        HttpServletResponse response = mock(HttpServletResponse.class); 

        DownloadServlet servlet = new DownloadServlet();
        servlet.doGet(request, response);
        assertEquals("text/html", response.getContentType());
    }

我正在servlet中測試我的doGet方法,我非常確定唯一可測試的代碼是response.setContentType(“ text / html”)。 但是,我的測試用例什么也沒做。 這是我的DownloadServlet類:

package downloadsupport;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.ws.security.spnego.Context;

import downloadsupport.LogRead;

/**
 * Servlet implementation class DownloadServlet
 * @author Gabe
 * @version 1.0
 */
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public DownloadServlet() {
    super();
}

private LogRead getInstance(){
    return new LogRead();
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("Download Servlet Invoked");
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();
    LogRead log = getInstance();
    // Test if each log file in the folder is success or fail
    for (String emailName : log.getEmails()) {
        if (log.canReadLog(emailName)) {
            System.out.println("Log Successful: " + emailName);
            // Create HTML button to download a successful file
            out.println("<div class='viewButton'>");
            out.println("<form method='get' action=" + emailName +">"); // emailName is the file to download
            out.println("<button type='submit' class='successButton'>"
                    + "Success: " + emailName + "</button>");
            out.println("</form>");
            out.println("</div>");
        } 
        else {
            System.out.println("Log Failed: " + emailName);
            // Create HTML button to download a failed file
            out.println("<div class='viewButton'>");
            out.println("<form method='get' action=" + emailName +">"); // emailName is the file to download
            out.println("<button type='submit' class='failButton'>"
                    + "Fail: " + emailName + "</button>");
            out.println("</form>");
            out.println("</div>");
        }
    }
    out.println("<br>");

    System.out.println(log.getEmails());
}

}

我懷疑您的測試由於NullPointerException而失敗,因為

response.getWriter();

將返回null。 除非您正確設置測試,否則Mockito模擬對象的所有訪問器都將返回null:

Mockito.when(response.getWriter()).thenReturn(aPrintWriterYouPreparedEarlier);

另外,根據log.getEmails()返回的內容,您的代碼甚至可能不會進入循環。 如果發生這種情況,您將只執行5行,然后在最后一個out.println("<br>");崩潰out.println("<br>");

暫無
暫無

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

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