我有一个从浏览器发送到Servlet的Ajax调用。在Servlet中计算一些值,例如A.我的查询是如何验证这个A.我在浏览器启动的地方使用TestNG,但在该控制之后转移到Servlet。我应该如何从Servlet返回值,以便在TestNG中我可以获取它并进行验证。
答案 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(模拟请求有添加它们的方法)