有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Javaservlet测试

我正在使用Jetty提供的ServletTester类来测试我的一个servlet

servlet使用InputStream读取请求主体的数据。read()构造一个字节[],该字节是servlet解码并执行操作的字节

ServletTest类提供了一个getResponses(ByteArrayBuffer)方法,但我不确定如何以正确的格式创建其中一个,因为它还需要包含头之类的内容(例如“内容类型:应用程序/八位字节流”)

有谁能告诉我一个简单的方法来构造这个,最好是使用现有的库,这样我就可以以类似于HttpTester类的方式使用它了

如果有一种“更好”的方法来测试servlet(理想情况下使用本地连接器而不是通过tcp堆栈),我也想听听这个

非常感谢


共 (3) 个答案

  1. # 2 楼答案

    为什么要使用模拟呢?为什么不在jetty中运行servlet来测试它呢

    Servlet servlet = new MyServlet();
    String mapping = "/foo";
    
        Server server = new Server(0);
        Context servletContext = new Context(server, contextPath, Context.SESSIONS);
        servletContext.addServlet(new ServletHolder(servlet), mapping);
        server.start();
    
        URL url = new URL("http", "localhost", server.getConnectors()[0].getLocalPort(), "/foo?bar");
    
        //get the url...assert what you want
    
        //finally server.stop();
    

    编辑:只是想让人们放心,这是非常快的。它也是一个非常可靠的指标,表明你的代码实际上会做什么,因为它实际上正在做

  2. # 3 楼答案

    Spring MVC为各种javax.servlet接口提供a small set of "mock" classes,例如HttpServletRequestHttpSession等等。这样就很容易对servlet之类的对象进行单元测试,只需将mock注入到例如doGet()方法中

    即使在服务器上不使用Spring本身,也可以使用库中的模拟,只是为了测试