如何运行jetty server进行java junit测试
我正在尝试编写一个集成测试,在本地启动jetty服务器,然后使用客户机与RESTURI通信,并调用下游的业务逻辑。但是,当我启动jetty服务器时,它不会放弃控制,因此不会执行我的客户机。所以我使用线程在另一个线程中启动jetty,但是,线程在客户端调用之前完成,它说连接被拒绝。我能采取什么办法如何运行jetty server进行java junit测试,java,rest,jetty,embedded-jetty,Java,Rest,Jetty,Embedded Jetty,我正在尝试编写一个集成测试,在本地启动jetty服务器,然后使用客户机与RESTURI通信,并调用下游的业务逻辑。但是,当我启动jetty服务器时,它不会放弃控制,因此不会执行我的客户机。所以我使用线程在另一个线程中启动jetty,但是,线程在客户端调用之前完成,它说连接被拒绝。我能采取什么办法 @Test public void testPerform() { final JettyServer jettyServer = JettyServer.create(); jett
@Test
public void testPerform() {
final JettyServer jettyServer = JettyServer.create();
jettyServer.buildJettyServer(ServletContextHandler.SESSIONS, "/", 8080, TestResource.class);
Runnable runnable = new Runnable()
{
@Override
public void run()
{
jettyServer.start();
}
};
new Thread(runnable).start();
final javax.ws.rs.client.Client client = ClientBuilder.newClient();
final Response response = client.target("http://localhost:8080/test").request().post(Entity.text(""));
jettyServer.stop();
}
跳过
Runnable
,跳过新线程(Runnable).start()
调用jettyServer.start()
将在服务器自身的线程(以及服务器所需的所有其他线程)上启动服务器
有关junit和jetty的基本示例
@测试
public void testGet()引发异常
{
//创建服务器
服务器=新服务器(8080);
ServletContextHandler上下文=新的ServletContextHandler();
ServletHolder defaultServ=新的ServletHolder(“default”,DefaultServlet.class);
defaultServ.setInitParameter(“resourceBase”,System.getProperty(“user.dir”);
defaultServ.setInitParameter(“dirAllowed”、“true”);
addServlet(defaultServ,“/”);
setHandler(上下文);
//启动服务器
server.start();
//测试获取
HttpURLConnection http=(HttpURLConnection)新URL(“http://localhost:8080/”).openConnection();
http.connect();
断言(“响应代码”,http.getResponseCode(),是(HttpStatus.OK_200));
//停止服务器
server.stop();
}
也可以使用junit注释之前的@和之后的>。这将在每次@Test
之前启动服务器,之后停止服务器
包装码头;
导入静态org.hamcrest.Matchers.*;
导入静态org.junit.Assert.*;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入org.eclipse.jetty.http.HttpStatus;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.servlet.ServletHolder;
导入org.junit.After;
导入org.junit.Before;
导入org.junit.Test;
公共类JUnitBeforefreafterJettyTest
{
专用服务器;
@以前
public void startJetty()引发异常
{
//创建服务器
服务器=新服务器(8080);
ServletContextHandler上下文=新的ServletContextHandler();
ServletHolder defaultServ=新的ServletHolder(“default”,DefaultServlet.class);
defaultServ.setInitParameter(“resourceBase”,System.getProperty(“user.dir”);
defaultServ.setInitParameter(“dirAllowed”、“true”);
addServlet(defaultServ,“/”);
setHandler(上下文);
//启动服务器
server.start();
}
@之后
公共码头()
{
尝试
{
server.stop();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
@试验
public void testGet()引发异常
{
//测试获取
HttpURLConnection http=(HttpURLConnection)新URL(“http://localhost:8080/”).openConnection();
http.connect();
断言(“响应代码”,http.getResponseCode(),是(HttpStatus.OK_200));
}
}
为了获得最佳方法,您还可以使用@BeforeClass
和@AfterClass
技术,以及自动绑定到开放端口。这将只启动服务器一次,每个测试类运行所有@Test
方法,然后在最后停止服务器一次
包装码头;
导入静态org.hamcrest.Matchers.*;
导入静态org.junit.Assert.*;
导入java.net.HttpURLConnection;
导入java.net.URI;
导入java.net.URL;
导入org.eclipse.jetty.http.HttpStatus;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.ServerConnector;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.servlet.ServletHolder;
导入org.junit.AfterClass;
导入org.junit.BeforeClass;
导入org.junit.Test;
公共类JUnitBeforefreaftClassJettyTest
{
专用静态服务器;
私有静态uriserveruri;
@课前
public static void startJetty()引发异常
{
//创建服务器
服务器=新服务器();
ServerConnector连接器=新的ServerConnector(服务器);
connector.setPort(0);//自动绑定到可用端口
addConnector(连接器);
ServletContextHandler上下文=新的ServletContextHandler();
ServletHolder defaultServ=新的ServletHolder(“default”,DefaultServlet.class);
defaultServ.setInitParameter(“resourceBase”,System.getProperty(“user.dir”);
defaultServ.setInitParameter(“dirAllowed”、“true”);
addServlet(defaultServ,“/”);
setHandler(上下文);
//启动服务器
server.start();
//确定服务器的基本URI
String host=connector.getHost();
if(主机==null)
{
host=“localhost”;
}
int-port=connector.getLocalPort();
serverUri=新的URI(String.format(“http://%s:%d/”,主机,端口));
}
@下课
公共静空码头()
{
尝试
{
server.stop();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
@试验
public void testGet()引发异常
{
//测试获取
HttpURLConnection http=(HttpURLConnection)serverUri.resolve(“/”).toURL().openConnection();
http.connect();
断言(“响应代码”,http.getResponseCode(),是(HttpStatus.OK_200));
}
}
什么类是JettyServer
?在我实现的最后一个类JettyServer中没有方法构建JettyServer
,它使用org.eclipse.jetty.server.server来启动jetty服务器。当然,但不是k