如何运行使用HttpUnit的servlet运行servlet的测试? 与ServletUnit

2019-09-27 10:53发布

我正打算通过单元测试ServletUnit我的Servlet和遇到一些问题跑了:
- 作为一个起点,我们应该创建一个ServletRunner的对象。 其中一个构造函数的期待与web.xml文件File对象。 我提供我的web.xml文件的完整路径,但不知何故,它忽略了路径在顶层文件夹中提供和搜索。 在代码段和错误消息是如下:

代码段

    ServletRunner sr = new ServletRunner(new File("* C:/eclipse-workspaces/pocs/lms-csd/src/main/webapp/WEB-INF/web.xml*")); 
ServletUnitClient sc = sr.newClient(); 
 WebRequest request = new PostMethodWebRequest("path to be specified" ); request.setParameter( "userId", "test" );
 request.setParameter( "password", "csd" );
  WebResponse response = sc.getResponse(request);
  String text = response.getText();

Assert.assertTrue(text.contains( “欢迎来到休假管理系统”));

堆栈跟踪

    com.meterware.httpunit.HttpInternalErrorException:
 Error on HTTP request: 500 org.apache.jasper.JasperException: java.io.FileNotFoundException: * C:\eclipse-workspaces\pocs\lms-csd\WEB-INF\web.xml* 
(The system cannot find the path specified)

[HTTP://本地主机/登录] - 为什么系统继续看着文件夹结构是... / WEB-INF / web.xml文件。 煤矿是一个maven项目,我不希望改变项目的结构,以这种方式适应。 我怎样才能让ServletRunner的类从一个指定的文件夹阅读? - 在Servlet代码中,我使用下面的代码:

 String result = null if (someCondition) result = "/welcome.jsp"; } else { logger.warn("Password Validation failed"); request.setAttribute("failedlogin", new Boolean(true)); result = "/index.jsp"; } } RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(result); requestDispatcher.forward(request, response); 

再次ServletUnit预计的welcome.jsp是在根foler,但JSP文件出现在... / src目录/主/ web应用程序/文件夹。 再怎么可以ServletUnit被告知目标文件夹位置?

提前谢谢了。

顺祝商祺M.SuriNaidu

Answer 1:

这是诸如此类的事情我做。 这是基类的我的servlet测试的传真。 在这种情况下,我当它在我的源代码树中存在通过web.xml文件中的相对路径。 我跑从蚂蚁和Eclipse这些测试。

abstract public class ServletTestCase {

    protected ServletRunner       m_runner;
    protected ServletUnitClient   m_client;
    protected String              m_userAgent = "something/1.0";

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        initHttpUnit();
    }

    @Override
    protected void tearDown() throws Exception {
        shutdownHttpUnit();
        super.tearDown();
    }

    protected void initHttpUnit() throws IOException, SAXException {
        shutdownHttpUnit();

        // We are expecting UTF-8 character handling in URLs, make it the default
        HttpUnitOptions.setDefaultCharacterSet("UTF-8");

        // Find the servlet's web.xml file and use it to init servletunit
        File file = new File("tests/web.xml"));
        m_runner = new ServletRunner(file);
        m_client = m_runner.newClient();
        m_client.getClientProperties().setUserAgent(m_userAgent);
    }

    protected void shutdownHttpUnit() {
        if (m_runner != null) {
            m_runner.shutDown();
        }
        m_client = null;
        m_runner = null;
    }
}


文章来源: How to run the servlet test by using HttpUnit servlet runner? Problems in Starting up with ServletUnit?