java - 在 JUnit 测试之间启动和停止 Jetty 服务器

标签 java testing junit jersey jetty

我正在尝试模拟我的程序的各种运行测试,在 @Before 方法中设置 Jetty 服务器并在 @After 中关闭它>。

我的第一个测试将成功运行,但在以下测试中尝试 POST 数据时 com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Software caused connection abort: recv failed 发生。有什么方法可以让我的服务器(和客户端?)在测试之间干净地关闭吗?

我的前后代码如下:

@Before
public void startServer() {
    try {
        server = new Server(8080);
        ServletContextHandler root = new ServletContextHandler(server, "/ingest", ServletContextHandler.SESSIONS);

        root.addServlet(new Servlet(), "/*");

        server.start();

        client = new Client();
        client.setChunkedEncodingSize(16 * 1024);

        FileInputStream stream = new FileInputStream(testFile);
        try {
            client.resource(uri).type(MediaType.APPLICATION_OCTET_STREAM).post(stream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            Closeables.closeQuietly(stream);
            client.destroy();
        }
    } catch (Exception e) {
        e.printStackTrace();
        fail("Unexpected Exception when starting up server.");
    }
}

@After
public void shutDown() {
    if (output.exists()) {
        output.delete();
    }
    try {
        server.stop();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

最佳答案

测试场景的最佳做法是不要对端口进行硬编码。这只会在其他地方运行时导致冲突,尤其是在负载适中或项目种类繁多的 CI 系统上。

在 Jetty 9 中(6、7、8 中的想法相同)

_server = new Server();
_connector = new ServerConnector(_server);  
_server.setConnectors(new Connector[] { _connector });
_server.start();
int port = _connector.getLocalPort();

关于java - 在 JUnit 测试之间启动和停止 Jetty 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794405/

相关文章:

javascript - 自动化应用程序测试 (phantomjs) 和 merge 分支

java - 为什么我的 StringUtils 类没有 isBlank()

java - 单元测试: how to pass my mock class in the read code

java - 您使用 ARM Jazelle 的体验如何?

junit - 如何使用 selenium(junit 或 testng)创建结构化自动测试?您对此的最佳做法是什么?

java - 如何在 Eclipse 中使用测试驱动设计概念测试异常

eclipse - 是否有在 Maven 构建生命周期期间运行的测试的日志文件?

java - 通过 setter 或服务使缓存失效?

internet-explorer - 如何在 Mac 上的 Microsoft Internet Explorer 中测试我的网页?

node.js - 在本地主机上测试 API 请求