Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何运行jetty server进行java junit测试_Java_Rest_Jetty_Embedded Jetty - Fatal编程技术网

如何运行jetty server进行java junit测试

如何运行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

我正在尝试编写一个集成测试,在本地启动jetty服务器,然后使用客户机与RESTURI通信,并调用下游的业务逻辑。但是,当我启动jetty服务器时,它不会放弃控制,因此不会执行我的客户机。所以我使用线程在另一个线程中启动jetty,但是,线程在客户端调用之前完成,它说连接被拒绝。我能采取什么办法

@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