1

我需要通过 http 向来自 Jetty 的请求客户端发送一个存根响应。当我独立运行 Junit 测试时,它可以工作,这意味着,我得到了正确的 XML 响应......但是当我从 maven 运行相同的东西时它会失败。我看到的错误是“ java.net.SocketException: Unexpected end of file from server”。我已经尝试了一切!请帮忙!

这是我的代码 -

Junit(当作为 Junit 测试运行时 - 它有效)

public class MyTest {

@Test
    public void testGetOpenLots() throws Exception {

        // create fixture
        MyService fixture = new MyService();

        // create jetty server instance
        Server server = new Server(8080);

        // set a handler
        server.setHandler(new HelloHandler());

        // set shutdown conditions
        // server.setStopAtShutdown(true);

        // start server
        server.start();

        // invoke operation
        MyResponse result = fixture.getWeather(someDummyRequest);

        assertNotNull(result);
    }

}

在某个地方,在 getWeather() 内部,我创建了一个 URL 对象并将 URL 传递http://localhost:8080给它并将请求发送到该 URL。此时,我希望 HelloHandler 的 handle 方法将被调用并将这个虚拟 XML 响应写入流,getWeather() 方法将接收响应。

这是处理程序:

public class HelloHandler extends AbstractHandler {

 public void handle(String target, Request baseRequest,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        response.setContentType("application/xml;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<result>a simple response</result>");

    }

}

当我从 maven 运行相同的东西时,它会抛出上面提到的错误。我究竟做错了什么?

4

1 回答 1

3

您可以尝试 Jadler ( http://jadler.net ),而不是实现自己的码头处理程序,这是一个我已经研究了一段时间的 http stubbing/mocking 库。

于 2013-08-01T21:53:34.423 回答