Мне нужно запустить Jetty сервер и запустить его в начале теста.Сервер Jetty должен подобрать контекст Spring и запустить набор служб RESTful.Затем мне нужно взять контекст, используемый Jetty, и внедрить некоторую фиктивную реализацию службы в определенный компонент поставщика услуг, чтобы я мог проверить, что служба получает правильный запрос и ответ, а также выполняет аутентификацию.
Я создал простой класс начальной загрузки:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class RESTServiceTest {
@BeforeClass
public static void setUp() throws Exception {
Server server = new Server(8080);
WebAppContext ctx = new WebAppContext();
ctx.setContextPath("/");
ctx.setWar("src/main/webapp");
ctx.setServer(server);
server.setHandler(ctx);
server.start();
Thread.sleep(5000);
}
@Test
public void testPush() throws Exception {
// do some tests here...
}
}
Однако при запуске этого юнит-теста я получаю следующую ошибку:
Context initialization failed
java.lang.IllegalStateException: Failed to invoke Servlet 2.5 getContextPath method
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:365)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:278)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:640)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:229)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:586)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:449)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89)
at org.eclipse.jetty.server.Server.doStart(Server.java:258)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
....
Caused by: java.lang.NoSuchMethodException: javax.servlet.ServletContext.getContextPath()
at java.lang.Class.getMethod(Class.java:1622)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:360)
... 30 more
Поэтому я сомневаюсь, что здесь может быть не так, и является ли подход, который я выбрал, правильнымone?
Что мне нужно, чтобы запустить Jetty и запустить Spring Spring?А как получить ссылку на контекст Spring после, чем в теле теста, чтобы я мог получить служебный бин и вызывать некоторые сеттеры с поддельным подуслугой?
Пожалуйста, советуйте.
Я ненужно создавать модульные тесты - это что-то вроде сквозного теста с макетами.