В среде Junit вы не получаете две вещи, которые вы обычно получаете из контейнера сервлета: помощь в настройке / уничтожении из GuiceServletContextListener
и фильтрацию GuiceFilter
, поэтому вам нужно сделать эти биты самостоятельно .
Вам нужно создать еще один сервлет, который обернет ваш сервлет и выполнит всю настройку / фильтрацию, которую вы обычно выполняете в контейнере сервлета; я рекомендую что-то вроде этого:
Предположим, ваш сервлет называется AdriansGuicedGwtServiceServlet
. Затем создайте это в своей тестовой директории:
public class TestAdriansGuicedGwtServiceServlet extends AdriansGuicedGwtServiceServlet {
private GuiceFilter filter;
@Override
public void init() {
super.init();
// move your injector-creating code here if you want to
// (I think it's cleaner if you do move it here, instead of leaving
// it in your main servlet)
filter = new GuiceFilter();
filter.init(new FilterConfig() {
public String getFilterName() {
return "GuiceFilter";
}
public ServletContext getServletContext() {
return TestAdriansGuicedGwtServiceServlet.this.getServletContext();
}
public String getInitParameter(String s) {
return null;
}
public Enumeration getInitParameterNames() {
return new Vector(0).elements();
}
});
}
@Override
public void destroy() {
super.destroy();
filter.destroy();
}
private void superService(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
super.service(req, res);
}
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
filter.doFilter(new FilterChain() {
public void doFilter (ServletRequest request, ServletResponse response)
throws IOException, ServletException {
superService(request, response);
}
});
}
}
И тогда в вашем Junit.gwt.rpc есть карта в TestAdriansGuicedGwtServiceServlet
вместо вашего реального сервлета.