[英]JUnit using Mockito for Servlet Test Case
I am try to do a basic mock of my servlet for a JUnit test case. 我尝试针对JUnit测试用例对servlet进行基本模拟。 However, I am receiving 0 code coverage from this particular test case. 但是,我从这个特定的测试案例中获得了0个代码覆盖率。 Here is my test case: 这是我的测试用例:
@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());
}
I am testing my doGet method in the servlet in which I am pretty sure the only code that is testable is the response.setContentType("text/html"). 我正在servlet中测试我的doGet方法,我非常确定唯一可测试的代码是response.setContentType(“ text / html”)。 However, my test case isn't doing anything. 但是,我的测试用例什么也没做。 Here is my DownloadServlet class: 这是我的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());
}
} }
I suspect that your test is failing with a NullPointerException because 我怀疑您的测试由于NullPointerException而失败,因为
response.getWriter();
will return null. 将返回null。 Mockito mock objects return null for any accessor unless you set your test up properly: 除非您正确设置测试,否则Mockito模拟对象的所有访问器都将返回null:
Mockito.when(response.getWriter()).thenReturn(aPrintWriterYouPreparedEarlier);
Also, depending upon what log.getEmails()
returns, your code may not even enter the loop. 另外,根据log.getEmails()
返回的内容,您的代码甚至可能不会进入循环。 If that happens you will only execute 5 lines and then crash at the last out.println("<br>");
如果发生这种情况,您将只执行5行,然后在最后一个out.println("<br>");
崩溃out.println("<br>");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.