首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JUnit测试中使用Jetty服务器

在JUnit测试中使用Jetty服务器
EN

Stack Overflow用户
提问于 2011-03-11 07:57:23
回答 4查看 15.5K关注 0票数 4

我一直在尝试通过在JUnit测试用例的BeforeClass方法中启动一个Jetty服务器,然后使用HttpClient向服务器发出请求来测试我的web应用程序。我让服务器启动时没有任何问题,但当我试图发出请求时,我一直收到404。

我的服务器配置如下:

代码语言:javascript
复制
  public void start() throws Exception {
        if (server == null) {
            server = new Server(PORT);
            server.setStopAtShutdown(true);

            wac = new WebAppContext();
            wac.setContextPath("/app");
            wac.setResourceBase("war");
            wac.setClassLoader(this.getClass().getClassLoader());
            server.addHandler(wac);

            server.start();
        }
   }    

我的配置有问题吗?服务器正在运行,我可以看到我正在访问它,它就是找不到任何资源。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-11 08:10:34

您可能需要在部署描述符(web.xml或jetty-web.xml)中将此servlet定义为资源。只是猜测;404表示您的代码根本没有运行,因此不是问题所在。这个问题甚至在你的代码有机会执行之前就已经发生了。

票数 3
EN

Stack Overflow用户

发布于 2013-08-13 19:16:55

这是一个使用jetty的完整Junit测试类:

代码语言:javascript
复制
package test.server;

import java.io.BufferedReader;
import java.io.InputStreamReader;

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.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;

public class MockPortalTest {

    private Server server;

    @Before
    public void startServer() throws Exception {
        server = new Server(8080);
        server.setStopAtShutdown(true);
        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setContextPath("/app");
        webAppContext.setResourceBase("src/main/webapp");       
        webAppContext.setClassLoader(getClass().getClassLoader());
        server.addHandler(webAppContext);
        server.start();
    }


    @Test
    public void shouldBePreAuthenticated() throws Exception {
        String userId = "invalid";
        HttpClient client = new DefaultHttpClient();
        HttpGet mockRequest = new HttpGet("http://localhost:8080/app");
        mockRequest.setHeader("http-user",userId);
        HttpResponse mockResponse = client.execute(mockRequest);
        BufferedReader rd = new BufferedReader
          (new InputStreamReader(mockResponse.getEntity().getContent()));    
        // DO YOUR ASSERTIONS
    }

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

}
票数 14
EN

Stack Overflow用户

发布于 2013-02-18 17:16:30

我从第一篇文章中的代码片段开始,然后开始奋力拼搏。下面的代码终于对我起作用了:

代码语言:javascript
复制
Server server = new Server(8080);
server.setStopAtShutdown(true);

WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/app");
webAppContext.setResourceBase("src/main/webapp");       
webAppContext.setClassLoader(getClass().getClassLoader());
server.addHandler(webAppContext);
server.start();

URL url = new URL("http://localhost:8080/app/some_call");
URLConnection connection = url.openConnection();
List<String> lines = IOUtils.readLines(connection.getInputStream());
System.out.println(lines.get(0));

POM如下所示:

代码语言:javascript
复制
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
    <version>${jetty.version}</version>
</dependency>
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>${jetty.version}</version>
</dependency>


<jetty.version>6.1.25</jetty.version>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5267423

复制
相关文章

相似问题

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