Java 使用jetty测试执行http post的方法

Java 使用jetty测试执行http post的方法,java,junit,jetty,Java,Junit,Jetty,我正在为一个执行HTTP post的程序编写junit测试,我正在尝试使用jetty来处理请求,但是我找不到好的例子或解释如何使用它来实现这个目的,有人有好的例子来说明如何做到这一点吗?junit是一个单元测试,而不是一个集成测试。集成测试意味着您需要启动并运行服务器来测试该功能 在这里,您可以看到集成测试的示例: @Test public void test() { HttpClient loggedClient = new Htt

我正在为一个执行HTTP post的程序编写junit测试,我正在尝试使用jetty来处理请求,但是我找不到好的例子或解释如何使用它来实现这个目的,有人有好的例子来说明如何做到这一点吗?

junit是一个单元测试,而不是一个集成测试。集成测试意味着您需要启动并运行服务器来测试该功能

在这里,您可以看到集成测试的示例:

     @Test
         public void test() {
                 HttpClient loggedClient = new HttpClient();
                 PostMethod loginPostMethod = new PostMethod(loginURL);
                 loginPostMethod.addParameter("j_username", login);
                 loginPostMethod.addParameter("j_password", password);
                 loginPostMethod.addParameter("remember", "1");
                 loginPostMethod.addParameter("clientType", clientType);
                 loginPostMethod.addParameter("clientVersion", clientVersion);
                  httpClient.executeMethod(postMethod);


                 String USERS_URL = HTTP_SERVER_DOMAIN + "/service";
                 PutMethod put = new PutMethod(USERS_URL);
                 put.addRequestHeader("Content-Type", "application/json");
                 put.setRequestBody("your_body");

                 try {
                     loggedClient.executeMethod(put);
                 } catch (HttpException e) {
                     e.printStackTrace();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }

                 assertEquals(HttpStatus.SC_OK, put.getStatusCode());
}

我不知道这是否能帮助任何人,但这是我为我的问题提出的解决方案,所以我想我会与你分享它。。。 我的问题是,在我试图用junit测试的程序的特定部分,它发出POST请求,我想验证它是否正确发出请求。。当然,我可以使用mockito来模拟发出请求的静态方法,但我只是认为使用像jetty这样的真正的服务器来测试我的程序发送的请求会更好,这样,我的所有程序都会被完全测试,而不会跳过任何部分。。。这是我写的jetty代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class JettyHttpServer extends AbstractHandler
{
    private static Server server = null;

    public Server getServer()
    {
        return server;
    }

    public static void startServer(int webServerPort) throws Exception
    {
        System.out.println("Initializing server");
        server = new Server(webServerPort);
        server.setHandler(new JettyHttpServer());
        server.start();
    }

    public static void stopServer() throws Exception
    {
        try
        {
            server.stop();
        } catch (Exception ex)
        {
            ex.printStackTrace();
            throw new Exception("Could not stop server", ex);
        }
    }

    public void handle(String pathInContext, Request request, HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException
    {
        System.out.println("inside Jetty Server...");
boolean requestWrongFlag = true

        if (httpRequest.getMethod().equals("POST"))
        {
            BufferedReader reader = httpRequest.getReader();
            String line;
            do {
            line = reader.readLine();
//do the validation here on the request received and in case it is not correct raise the requestWrongFlag
            System.out.println(line);
            }while (line!=null);


            httpResponse.setContentType("text/html;charset=utf-8");
           if(!requestWrongFlag)
               httpResponse.setStatus(HttpServletResponse.SC_ACCEPTED);
           else
                       httpResponse.setStatus(httpServletResponse.sc_BAD_REQUEST)
            httpResponse.getWriter().println("OK");
            request.setHandled(true);
        }
    }
}
然后在调用测试中的程序之前,我在测试用例中调用了jetty服务器


如果有人有更好的建议。。。请与我分享……

谢谢保罗的回答,我非常感谢。但这不是我的情况。我有一个程序,可以进行webservice调用,获取一些数据,然后将其存储在数据库中,或者将其发布到HTTP服务器。我已经设法使用axis2代码生成器创建了一个模拟Web服务,并将其部署在.war文件中,并在jetty中使用它,还设法使用hsql和dbunit测试程序的JDBC部分。。。但是我真的想不出一种方法来测试程序中向HTTP服务器发送POST请求的部分。。。这就是为什么我问我能不能用jetty做这个。。。你怎么看?如果webService是第三方服务,并且总是按照你的期望工作,那么你肯定需要使用mock(我建议你使用mockito)。您必须认识到,您想要测试的是如何序列化和反序列化从该WS发送和接收的信息。在任何情况下,我粘贴给您的示例对于向任何web服务发出请求都是完全有效的。。。也许我会试试莫基托。。。感谢您的帮助:)