大家如何单元测试JSP~我都弄了四天了,还是没搞定~
如何单元测试JSP呀。
先说一下,我使用的IDE为m2eclipse~
我从JUnit in Action的书中了解到可以使用cactus来实现,于是我就Google了很久及看maven官网,来使用maven3及插件cactus.integration.maven2来实现集成单元测试自动化(其中用到了war插件来打包及cargo插件来自动部署及开启关闭服务器)。但cactus.integration.maven2插件没有JUnit in Action书中提到的cactus目标,所有还是要手动输入URL来测试。但这几乎还是我不想要的。
以上费了我两天中的业余时间,就为了单元测试JSP!命苦呀!
接着我又GOOGLE,说JUnit recipes有一章说了单元测试JSP。于是我就看了那一章的关于单元测试JSP的节~
写下了代码:
package jsps;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.util.*;import javax.servlet.ServletException;import javax.servlet.http.*;import junit.framework.*;import com.dongantech.eshop.model.*;import com.dongantech.eshop.services.requests.*;import com.dongantech.eshop.services.responses.*;import com.dongantech.eshop.web.servlets.*;import com.dongantech.eshop.services.handlers.*;import org.easymock.*;import com.meterware.servletunit.*;import com.meterware.httpunit.*;public class TestMemberManagerServletResponseJsps extends DongAnShopJspFixture{ private ServletRunner servletRunner = null ; private RequestHandler mockFindHandler = null; private MockControl requestHandlerMockControl = null ; public void setUp(){ try { servletRunner = new ServletRunner(new File(DongAnShopJspFixture.getWebDeploymentDescriptorPath()),"/donganshop"); requestHandlerMockControl = MockControl.createControl(RequestHandler.class); mockFindHandler = (RequestHandler) requestHandlerMockControl.getMock(); } catch (Exception e) { e.printStackTrace(); fail("fail to new ServletRunner!"); } } public void testFoundResponseJsp() throws Exception{ Member preparedMember = new Member("lj"); Request preparedRequest = new SimpleRequest(); Map requestContext = new HashMap(); requestContext.put("memberFound",preparedMember); preparedRequest.setContext(requestContext); preparedRequest.setName(SimpleRequest.TYPE_FIND); mockFindHandler.process(preparedRequest); requestHandlerMockControl.setReturnValue(createMemberFoundResponse()); requestHandlerMockControl.replay(); //////////////////////////////////////////////////////////////////////////////////////////////////////// ServletUnitClient client = servletRunner.newClient(); WebRequest request = new GetMethodWebRequest("http://localhost/donganshop/members/memberManager"); request.setParameter("request",SimpleRequest.TYPE_FIND); request.setParameter("username","lj"); InvocationContext invocationContext = client.newInvocation(request); MemberManagerServlet servlet = (MemberManagerServlet) invocationContext.getServlet(); servlet.putIntoRequestHandlers("FIND",mockFindHandler); HttpServletRequest httpReq = invocationContext.getRequest(); HttpServletResponse httpResp = invocationContext.getResponse(); servlet.getPages().put(SimpleResponse.TYPE_FOUND,MemberManagerServlet.PAGE_FOUND); servlet.service(httpReq, httpResp); WebResponse response = invocationContext.getServletResponse(); System.out.println(response.getText()); } public void tearDown(){ requestHandlerMockControl.verify(); } public Response createMemberFoundResponse(){ Response resp = new SimpleResponse(); List<Member> foundMembers = new ArrayList(); foundMembers.add(new Member("lj")); foundMembers.add(new Member("lj520")); resp.setType(SimpleResponse.TYPE_FOUND); resp.getContext().put("members", foundMembers); return resp; }}
[解决办法]
JSP属于View层,我认为可以进行js test或ui test,除非你把很多业务都写在JSP了,否则不用像测试后台代码那样搞。
[解决办法]
out.print 输出测试。看执行到那一块了!
[解决办法]
我们公司的测试组才4个人。。他们测试就是直接运行看效果。。
[解决办法]
我的天吖,原来是高手。。。。
[解决办法]
既然都是到jsp,这个就不是看数据了,而是看整个界面的展示效果。
不要在代码单元测试了,在怎么单元你还是在代码里面,体现不出来,
直接在浏览器回车