Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试JSP文件_Jsp_Unit Testing - Fatal编程技术网

单元测试JSP文件

单元测试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

我有一个JSP文件,其中包含基于从servlet接收的对象列表生成HTML的逻辑。在servlet的doPost()方法中,它设置此对象列表,然后将其设置为HttpServletRequest属性,如下所示:
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。

请提供一些示例,说明如何解决提问者的问题。最好避免简单地发布外部链接。