如何从servlet发送响应

时间:2015-04-27 08:57:28

标签: java ajax servlets testng

我有一个从浏览器发送到Servlet的Ajax调用。在Servlet中计算一些值,例如A.我的查询是如何验证这个A.我在浏览器启动的地方使用TestNG,但在该控制之后转移到Servlet。我应该如何从Servlet返回值,以便在TestNG中我可以获取它并进行验证。

1 个答案:

答案 0 :(得分:0)

我能想到的解决方案:

(1) 

绕过servlet:将业务计算放在单独的方法/类中,并直接测试。这可能足够如果重点放在业务代码上(而servlet层执行简单的任务,例如提取简单的请求参数)。 E.g:

// logic - assuming this is the test focus, with interesting cases such as insufficient funds, limited account etc.
public class MyBank{
   public void transferFunds(int fromAccountId, int toAccountId, int dollars)...   
}
// servlet that happens to have trivial code that isn't so important to test
public class MyServlet{
    ...
         int fromAccountId=Integer.parseInt(req.getParameter("fromAccountId"));
         int toAccountId=Integer.parseInt(req.getParameter("toAccountId"));
         int dollars= Integer.parseInt(req.getParameter("dollars"));
         bank.transferFunds(fromAccountId, toAccountId, dollars)
}

(2)使用嵌入式服务器,如Jetty。 http://www.eclipse.org/jetty/documentation/current/embedding-jetty.html 从您的单元测试中,您只需启动一个码头(使用' new Server()' ...)并告诉它执行servlet。

(3)你也可以调用你的servlet,用模拟请求/响应/会话等注入它。例如,Spring就有这样的模拟对象。 所以它是这样的:

HttpServletRequest mockReq=new MockHttpServletRequest();
HttpServletRequest mockResp=new MockHttpServletResponse();
new MyServlet().service(mockReq, mockResp);

请注意,根据您的servlet需求,可能需要进行一些调整 - 例如请求参数,session(模拟请求有添加它们的方法)