![](/img/trans.png)
[英]How to write assertTimeoutPreemptively (JUnit 5) in JUnit 4?
[英]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.