@WebAppConfiguration 如何在没有 servlet 或应用程序容器的情况下工作?

How @WebAppConfiguration works without servlet or application container?

我正在使用 spring 4 和 testng。当我根本没有安装像 tomcat 这样的 servlet 容器时,@WebAppConfiguration 如何正确加载 WebApplicationContext 和 servlet。在这种情况下是否可以通过 url 访问 servlet 还是必须安装 Web 服务器?

您不需要安装真正的 servlet 容器。您可以认为 @WebAppConfiguration 创建的 servlet 容器只是一个伪造的基于 in-memory 的 servlet 容器,而不是像 Tomcat 这样的真实容器。它只能通过以编程方式调用其方法来工作,不能由 URL 调用。

这个伪造的Servlet容器的实际实现包括MockServletContextMockHttpServletRequestMockHttpServletResponseMockHttpSessionMockServletConfig等...

想法是为了测试一个HttpServlet,我们首先通过设置MockHttpServletRequest的相关状态来配置HTTP请求,然后以编程方式调用被测试的HttpServlet,并验证MockHttpServletResponse:

的结果
@ContextConfiguration
@WebAppConfiguration
public class FooServletTest {

   @Autowired MockHttpServletRequest request;
   @Autowired MockHttpServletResponse response;

   @Test
   public void test1(){
       request.setParameter("user", "enigma");
       //blablab.


       FooServlet sut = new FooServlet();
       sut.doGet(request, response);

       //Then assert the response is correct by checking its status

   }
}

有关详细信息,请参阅 docs