Использование сервера Jetty с тестами JUnit - PullRequest
4 голосов
/ 11 марта 2011

Я пытался протестировать свое веб-приложение, запустив сервер Jetty в методе BeforeClass моего тестового примера JUnit, а затем используя HttpClient для формирования запроса к серверу. Я получаю сервер для запуска без каких-либо проблем, но я продолжаю получать 404, когда я пытаюсь сделать запрос.

Конфигурация моего сервера выглядит следующим образом:

  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();
        }
   }    

Что-то не так с моим конфигом? Сервер работает, и я вижу, что его бьет, просто не могу найти никаких ресурсов.

Ответы [ 4 ]

14 голосов
/ 13 августа 2013

Это полный тестовый класс Junit, который использует причал:

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();
    }

}
6 голосов
/ 18 февраля 2013

Я начал с фрагмента кода в первом посте, а затем начал пробиваться. Код ниже, наконец, работал для меня:

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 выглядит так:

<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>
3 голосов
/ 11 марта 2011

Возможно, вам нужно определить этот сервлет как ресурс в дескрипторе развертывания (web.xml или jetty-web.xml).Просто предположение;404 означает, что ваш код вообще не работает, и, следовательно, это не проблема.Проблема возникает еще до того, как ваш код сможет выполнить.

0 голосов
/ 11 марта 2011

Я думаю, что вы забыли установить:

wac.setWar("/path/to/war/file");

Или лучше использовать конструктор:

wac = new WebAppContext("/path/to/war/file", "/app");
...