我試圖模擬我的程序的各種運行測試,在@Before
方法中設置Jetty服務器並在@After
中關閉它。在JUnit測試之間啓動和停止Jetty服務器
我的第一個測試會成功運行,但是在嘗試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();
}
}
真棒,這對我很有用! – hsestupin 2013-04-29 00:10:03
對於Jetty 6,我必須使用SelectChannelConnector(ServerConnector不存在)。 – Dennie 2014-01-16 13:55:07