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