首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用嵌入式Jetty测试Spring-Rest服务

用嵌入式Jetty测试Spring-Rest服务
EN

Stack Overflow用户
提问于 2015-05-29 12:14:38
回答 1查看 2K关注 0票数 1

我想要创建一个嵌入式码头服务器(不是maven,gradle等)。测试春季休息服务。

为此,我创建了一个EmbeddedServer类。但是不幸的是,rest服务的调用总是导致http 404错误。怎么搞错了?

rest服务在tomcat (而不是嵌入式)中工作得很好。

Im使用以下依赖项:

代码语言:javascript
复制
"org.eclipse.jetty:jetty-server:8.1.17.v20150415"
"org.eclipse.jetty:jetty-webapp:8.1.17.v20150415"

下面是EmbededServer类:

代码语言:javascript
复制
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class EmbeddedServer {

    private Server server;

    public void start() throws Exception {
        this.server = createServer();
        this.server.start();
    }

    public void stop() throws Exception {
        this.server.stop();
        this.server.join();
        this.server.destroy();
    }

    private Server createServer() {
        final Server server = new Server(8080);

        final WebAppContext context = new WebAppContext();
        context.setContextPath("/");
        context.setResourceBase("src/main/webapp");
        context.setDescriptor("src/main/webapp/WEB-INF/web.xml");
        context.setParentLoaderPriority(true);
        context.setServer(server);

        server.setHandler(context);

        return server;
    }
}

而考试班:

代码语言:javascript
复制
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

public class SimpleTest {

    private HttpClient client;
    private EmbeddedServer server;

    @Before
    public void before() throws Exception {
        this.client = new DefaultHttpClient();
        this.server = new EmbeddedServer();
        this.server.start();
    }

    @After
    public void after() throws Exception {
        this.server.stop();
    }

    @Test
    public void invokeHello() throws Exception {
        final HttpResponse response = invokeGetRequest("http://localhost:8080/hello");
        verifyResponse(response, 200, "hello");
    }

    private HttpResponse invokeGetRequest(final String path) throws Exception {
        final URI wsAddress = new URI(path);
        final HttpGet method = new HttpGet(wsAddress);
        return this.client.execute(method);
    }

    private void verifyResponse(final HttpResponse actualHttpResponse, final int expectedHttpCode, final String expectedResponse) throws IOException {
        assertThat(actualHttpResponse.getStatusLine().getStatusCode(), equalTo(expectedHttpCode));

        final String actualResponse = EntityUtils.toString(actualHttpResponse.getEntity(), "UTF-8");
        assertThat(actualResponse, equalTo(expectedResponse));
    }
}

此测试失败的原因如下:

代码语言:javascript
复制
java.lang.AssertionError: 
  Expected: <200>
  but: was <404>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-01 14:09:10

ResourceBase和描述符的路径必须是绝对的。

代码语言:javascript
复制
context.setResourceBase("c:/myapp/src/main/webapp");
context.setDescriptor("c:/myapp/src/main/webapp/WEB-INF/web.xml");
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30529368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档