单元测试JSP文件
我有一个JSP文件,其中包含基于从servlet接收的对象列表生成HTML的逻辑。在servlet的doPost()方法中,它设置此对象列表,然后将其设置为HttpServletRequest属性,如下所示:单元测试JSP文件,jsp,unit-testing,Jsp,Unit Testing,我有一个JSP文件,其中包含基于从servlet接收的对象列表生成HTML的逻辑。在servlet的doPost()方法中,它设置此对象列表,然后将其设置为HttpServletRequest属性,如下所示:request.setAttribute(“objectList”,objectList)。以下是我拥有的JSP代码的相关部分: <c:set var="endSelect" value="${false }" /> <c:forEach items="${objectLi
request.setAttribute(“objectList”,objectList)代码>。以下是我拥有的JSP代码的相关部分:
<c:set var="endSelect" value="${false }" />
<c:forEach items="${objectList }" var="object">
<c:choose>
<c:when test="${object.getType().equals("selectObject") }">
<c:if test="${!endSelect }">
<select id="${object.getId() }-detail" name="${object.getName() }" >
</c:if>
<option name="${object.getName() }" value="${object.getValue() }">
<c:out value="${object.getValue() }" />
</option>
<c:set var="endSelect" value="${true }" />
</c:when>
<c:otherwise>
<label for="${object.getId() }">
<c:out value="${child.getDecisionName() }" />
</label>
<input id="${object.getId() }" type="text" name="${object.getName() }" >
</c:otherwise>
</c:choose>
<c:if test="${endSelect }">
</select>
<c:set var="endSelect" value="${false }" />
</c:if>
</c:forEach>
如您所见,基于对象类型,JSP将为选择框或文本框生成HTML
下面是我想要测试的方法:我想要设置一个单元测试文件,每个测试在其中创建不同的对象(或模拟它们,无论哪个),将这些对象放在一个列表中,然后将该列表发送到我的JSP文件。然后我想验证从JSP生成的HTML
问题是我的JSP并不是一直托管在服务器上。我不能只是去获取网址。我不想仅仅为了测试而启动服务器和托管JSP页面。我想说,,“嘿,这是一个假的HttpServletRequest,设置了一些假属性。通过这个JSP文件运行该请求,并向我显示生成的HTML,这样我就可以确保在某些测试中有select标记,而不是其他测试,并且end select标记显示在它们应该显示的位置,存在正确数量的文本输入,等等……”
我查看了ApacheCactus/JakartaCactus、JSoup、HttpUnit、Selenium、JUnit和Mockito,但所有这些都有一个问题,要么需要已经托管JSP,要么是“自动单击”“解决方案,这不是我真正想要的。您不想像这样测试JSP;测试JSP本质上是一种集成测试,除非您从Tomcat之类的东西中提取JSP呈现引擎
其他模板引擎不受此限制,例如FreeMarker、把手等
此外,您只需启动一次容器并对其运行整个集成测试套件。您可能需要检查一个工具,该工具允许将bean、会话变量和请求参数直接注入JSP
使用JspTester,您需要在本地web服务器(如Tomcat)中运行web应用程序(希望这种形式的“托管”不会违反您的要求),然后调用JspTester的本地URL。运行后,将提供一个顶部面板,用于输入呈现JSP所需的对象,并单击“运行”图标呈现JSP。请提供一些示例,说明如何解决提问者的问题。最好避免简单地发布外部链接。